最基础的穷竭搜索(二)
特殊状态的枚举
next_permutation()
考虑三个字符所组成的序列{a,b,c}。
有六个可能的排列组合:abc,acb,bac,bca,cab,cba。
next_permutation()会取得[first,last)所标示之序列的下一个排列组合,如果没有下一个排列组合,便返回false;否则返回true。
bool used[MAX_N];
int perm[MAX_N];
//生成{0,1,2,3,4......n-1}的n!中全排列
void permutationl(int pos,int n){
if(pos==n){
//....对perm操作
}
return 0;
for(int i=0;i<n;i++){
if(!used[i]){
perm[pos]=i;
used[i]=true;
permmutation(per+1,n);
used[i]=false;
}
}
return ;
}
#include<algorithm>
int perm2[MAX_N]
void permutation2(int n){
for(int i=0;i<n;i++){
perm2[i]=i;
}
do{
...
}while(next_permutation(perm2,perm2+n));
return ;
}