#21644: 22行DFS(下面之前寫的那個不要看(醜然後還不能刪),丟臉OUO)


610078 (電資意大利麵的最後希望)

學校 : 國立臺北科技大學
編號 : 119723
來源 : [114.36.28.204]
最後登入時間 :
2024-02-16 00:24:23
a524. 手機之謎 | From: [49.216.101.240] | 發表日期 : 2020-07-01 09:55

大致上看就是

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格開始做嘗試

 

程式碼鏈接(先看過上面,實在不行再點進來):

https://github.com/CalvinWan0101/ZeroJudge-Basic/tree/master/a524-%E6%89%8B%E6%A9%9F%E4%B9%8B%E8%AC%8E

QAQ我之前寫的那個根本誤人子弟,在這邊說一聲對不起

 
ZeroJudge Forum