参考:啊哈算法 p74页
递归的执行过程
#include"stdio.h"
int n;//1-n的全排列
int a[20];//默认初始化为零
int book[20];//默认初始化为零
void dfs(int step) //step 第几个数字
{
if(step==n+1)//判断是否可以结束递归/递归结束条件
{ int j;
for(j=1;j<=n;j++)
{
printf("%d",a[j]);
}
printf("\n");
return ;
}
int i;
for(i=1;i<=n;i++)
{
if(book[i]==0)//数字如果没有尝试过,当前进行尝试
{
a[step]=i;
book[i]=1;//book[i]用来标识i这个数字是否之前用过,book[i]等于1表示i已经被用过。
dfs(step+1);
book[i]=0;//结束此次标记,这样下次的一条路径才能用这个数字。否则一条路径用了n个数字,用完了数字,没法玩了。
}
}
}
int main()
{
scanf("%d",&n);
dfs(1);
return 0;
}