如何处理一个数的全排列呢?
采用递归的方法。下面给出模板。
#include <cstdio>
const int maxn=100;
int n,p[maxn],hash[maxn]={false};
void generatep(int index)
{
if(index==n+1) //递归边界,说明已经处理完排列的1-n位
{
for(int i=1;i<=n;++i)
{
printf("%d",p[i]);
}
printf("\n");
return ;
}
for(int x=1;x<=n;++x) //枚举1-n试图将x填入p[index]
{
if(hash[x]==false) //x不在p[0]-p[index-1]中
{
p[index]=x; //将x加入当前排列
hash[x]=true;
generatep(index+1); //处理排列的第index+1位
hash[x]=false; //已处理完p[index]为x的子问题,还原状态
}
}
}
int main()
{
scanf("%d",&n); //处理n的全排列 n<100;
generatep(1);// 从1开始填
return 0;
}