看板 C_and_CPP 關於我們 聯絡資訊
上網看解數獨程式的程式碼(含教學) http://oddest.nc.hcc.edu.tw/su304.htm 加上行號可編譯版本:http://gist.github.com/121369 裡面的第66行到88行 tryAns()函數 int tryAns() { // 測試求解 int sp=getNextBlank(-1) ;// 取得第一個空白的位置開始填入數字 do { sudoku[sp]++ ; // 將本位置數字加 1 if(sudoku[sp]>9) // 如果本位置的數字已大於 9 時則回到上一個位置繼續測試 { sudoku[sp]= 0 ; sp= pop() ; } else { /** 如果同行、列、九宮格都沒有相同的數字,則到下一個空白處繼續 當然,如果發現有相同的數字時,就需把原位置的數字加 1(所以本處什麼都不做)**/ if(check(sp)==0) { push(sp) ; sp= getNextBlank(sp) ; } } }while(sp>=0 && sp<81); } 看了半天還是好難體會他的意思 請問有人看得懂嗎@@ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.91.19
ledia:如果你只是要問有沒有人看得懂的話, 我可以看得懂... XD 06/01 21:06
ledia:簡單的說這是一種遞迴轉成迴圈的寫法, 自己用 stack 模擬 06/01 21:07
ledia:從某一個空位猜值, 看有沒有違反條件, 沒有就再猜下一個空位 06/01 21:09
ledia:這一個通通猜過都不行, 就回前一個 +1 再往後猜 06/01 21:09
ledia:stack 是用來存下 "前一個" 猜的是哪個位置 06/01 21:10
sosokill:樓上的方法跟我寫八皇后用的方法好像XD 06/01 21:10
sosokill:暴力法 Orz 06/01 21:11
ledia:呃... 我只是在解釋原 po 程式的做法 06/01 21:16
ledia:一般的搜尋不都是這麼做嗎 @@ 06/01 21:17
final01:最典型的作法就是如此吧 06/01 22:25
sosokill:只是這樣程式碼會比較多 據我所知八皇后可以弄出個啥 06/02 04:12
sosokill:演算法 可惜我才疏淺薄 沒想出來 Orz 06/02 04:13
ledia:一般遞迴搜尋很精簡吧 ? 就算是上面那樣程式也不多耶 06/02 11:21
ledia:八皇后的別的方法是用馬步解嗎 ? XD 06/02 11:22