C++标准库中提供了next_permutation函数,可以把n个元素共n!种不同的排列生成出来。
例如枚举n个元素的不同排列:
bool used[MAX_N];
int perm[MAX_N];
void permutation1(int pos, int n)
{
if(pos == n)
{
//对perm的操作
return;
}
for(int i=0;i<n;i++)
{
if(!used[i])
{
perm[pos] = i;
used[pos] = true;
permutation1(pos + 1, n);
used[i] = false;
}
}
return;
}
这个是使用深搜回溯的思想,求n个数的不同排列。
此外还可以使用函数next_permutation:
#include<algorithm>
int perm2[MAX_N];
void permutation2(int n)
{
for(int i=0;i<n;i++)
{
perm2[i] = i;
}
do
{
//对perm2的操作
}while(next_permutation(perm2,perm2 + n));
return;
}
所有排列都生成后,next_permutation会返回false。