递归回溯 求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;
}
相关文章推荐
- next-permutation与prev-permutation及递归实现全排列
- hdu1027(使用next_permutation求第m小的全排列)
- 全排列(next_permutation,递归)
- (排列生成算法)枚举排列的两种方法:递归枚举和next_permutation (使用多用next_permutation)
- 蓝桥杯 算法提高 3000米排名预测 DFS 递归搜索 next_permutation()使用
- uva 146 next_permutation运用+万能头文件(使用next_permutation得到的全排列后一个一定比前一个要大)
- 排列函数 prev_permutation和next_permutation的使用
- 【C++_STL_next_permutation】全排列讲解
- STL next_permutation(a,a+n) 生成一个序列的全排列。满足可重集。
- 全排列(一)next_permutation方式实现
- STL: <algorithm>中 next_permutation()生成全排列
- POJ 2718 Smallest Difference(暴力,全排列,next_permutation)
- next_permutation和prev_permutation(全排列)
- 方格填数-用next_permutation()全排列函数做的
- 全排列 next_permutation
- next_permutation()函数 (数字1~10内实现全排列)
- 九度OJ 1120 全排列 -- 实现C++STL中next_permutation()
- POJ1146初学使用偷懒的next_permutation()
- 全排列生成算法:next_permutation
- 全排列的递归和非递归实现(permutation)(C++)