您的位置:首页 > 其它

递归回溯 求N个数的全排列 及 next_permutation的使用

2017-10-05 20:46 435 查看
思路很简单,递归加回溯,看代码很好懂,结果如下
#include <iostream>
#include <vector>
using namespace std;
int n;
vector<vector<int>> ans;
void find(vector<int> &a,vector<int> &used,vector<int> &t){
if(t.size() == n){
ans.push_back(t);
return;
}
for(int i=0;i<n;i++){
if(used[i] == 0){
t.push_back(a[i]);
used[i]=1;	//使用过的置为1
find(a,used,t);
t.pop_back();//回溯,弹出元素
used[i]=0;	//回溯,used置0
}
}
}
int main()
{
cout<<"请输入数字个数:";
cin>>n;
vector<int> a(n,0),t;
vector<int> used(n,0);
cout<<"请输入"<<n<<"个数字:";
for(int i=0;i<n;i++)
cin>>a[i];
find(a,used,t);
cout<<"\n结果如下:"<<endl;
for(int i=0;i<ans.size();i++){
for(int j=0;j<ans[i].size();j++)
cout<<ans[i][j]<<" ";
cout<<endl;
}
return 0;
}

其实,使用STL标准库函数next_permutation也可以很方便得到全排列,代码如下,具体参考博客http://blog.csdn.net/ac_gibson/article/details/45308645

#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int num[3]={1,2,3};
do
{
cout<<num[0]<<" "<<num[1]<<" "<<num[2]<<endl;
}while(next_permutation(num,num+3));
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: