[学习][STL]next_permutation

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));
}

猜你喜欢

转载自www.cnblogs.com/lllxq/p/9433451.html