递归回溯 求N个数的全排列 及 next_permutation的使用
来源:互联网 发布:北京编程培训学校 编辑:程序博客网 时间:2024/06/06 06:54
思路很简单,递归加回溯,看代码很好懂,结果如下
#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;//使用过的置为1find(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;}
阅读全文
0 0
- 递归回溯 求N个数的全排列 及 next_permutation的使用
- 求n个数的全排列
- n个数的全排列C语言递归 (回溯)back-tracking
- 递归法-求N的全排列
- N个数取m个数的全排列非递归
- hdu1027(使用next_permutation求第m小的全排列)
- 普通递归算法:输出n个数的所有全排列
- N个数全排列的非递归算法
- 打印n个数的全排列(递归版)
- n个数的全排列
- N个数的全排列
- n个数的全排列
- N个数的全排列
- n个数的全排列
- N个数的全排列
- 求数组中任意n个数的全排列
- 递归求n个元素的全排列
- 运用递归求n个元素的全排列
- C语言重定义不同的基类型
- rocketmq入门使用
- Java 多线程(PART VI) 线程状态图解
- 2017.10.5 最短母串 思考记录
- centos 安装boost(caffe需要)
- 递归回溯 求N个数的全排列 及 next_permutation的使用
- hdu 2094
- 接水问题
- [BZOJ]3994 [SDOI2015]约数个数和 莫比乌斯 + 分块
- codefoces 868C(二进制,状态压缩)
- 15算法课程 67. Add Binary
- 接口与抽象类的浅析
- HDU 3652 (数位dp)
- 小车调试篇