O(n!) 求长度为n的序列的全排列:
①递归实现:(参考--https://blog.csdn.net/hero_boke/article/details/58637535)
#include<cstdio> #include<algorithm> using namespace std; int n,a[10]; void get_permutation(int layer){ if(layer==n) { for(int i=1;i<=n;i++) printf("%d",a[i]); printf("\n"); return; } for(int i=layer;i<=n;i++){ swap(a[i],a[layer]); get_permutation(layer+1); swap(a[i],a[layer]); } } int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); get_permutation(1); }
②STL--next_permutation算法:
#include<cstdio> #include<algorithm> using namespace std; int n,a[10]; int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); do{ for(int i=1;i<=n;i++) printf("%d",a[i]); printf("\n"); }while(next_permutation(a+1,a+1+n)); }