全排列的简单递归实现
//newStart CY //打印全排列 #include<iostream> #include<cstdio> #include<algorithm> #include<string> #include<cstring> using namespace std; const int maxn = 15; int arr[maxn]; //实现简单的全排列 void print_permutation(int n,int cur,int* arr)//n为有n个数全排列,n为当前位置,arr为数组 { if(cur==n) { for(int i=0;i!=n;++i) cout<<arr[i]; cout<<endl;//递归终止条件 }else{ for(int i=1;i<=n;++i) { int flag = true;//排除已经使用过的 for(int j=0;j!=cur;++j) { if(arr[j]==i) flag = false; } if(flag) { arr[cur] = i; prev_permutation(n,cur+1,arr); } } } } int main() { prev_permutation(3,0,arr); }
C++容器内的next_permutation
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; int main() { int n,p[10]; cin>>n; for(int i=0;i!=n;++i) cin>>p[i]; sort(p,p+n); do{ for(int i=0;i!=n;++i) cout<<p[i]; cout<<endl; }while(next_permutation(p,p+n)); }
//适用于可重集
不怕万人阻挡,只怕自己投降。
posted on 2019-09-02 18:56 chengyulala 阅读(183) 评论(0) 编辑 收藏 举报