參考:啊哈算法 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;
}