大致上看就是
1.dfs函數
2.主函數
建立公用變數n//1~n做排列
公用int陣列
answer[10] //用來放答案
bucket[10] = { 0 };//記錄對應數字出現的次數
如:bucket[2]=1表示2這個數字出現過一次了
dfs函數
void dfs(step):
第一步先判斷是不是走到盡頭了
if(step==n+1) //為什麼是n+1不是n呢?因為1表示第一格,n表示第n格,當step=n+1時表示1~n格都排完了
印出answer陣列1~n的元素
然後return
如果step!=n+1 //表示要開始做嘗試了
for (int i = n; i >= 1; i--) | |
if (bucket[i] == 0) { | //i這個數字沒有被使用過的時候 |
answer[step] = i; | //先把i丟進answer陣列 |
bucket[i] = 1; | //標記一下這個數字用過了 |
dfs(step + 1); | //進入下一層第(step+1)格 |
bucket[i] = 0; |
//這邊是嘗試完之後回來,回到這個數字沒有用過的時候,所以要重置一下標記為尚未使用過 |
} |
主函數:
當輸入n
dfs(1) //表示從第1格開始做嘗試
程式碼鏈接(先看過上面,實在不行再點進來):
QAQ我之前寫的那個根本誤人子弟,在這邊說一聲對不起