[問題] 程式碼看不懂...

看板C_and_CPP (C/C++)作者 (丁丁)時間16年前 (2009/06/01 20:17), 編輯推噓2(2012)
留言14則, 3人參與, 最新討論串1/1
上網看解數獨程式的程式碼(含教學) 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

06/01 21:06, , 1F
如果你只是要問有沒有人看得懂的話, 我可以看得懂... XD
06/01 21:06, 1F

06/01 21:07, , 2F
簡單的說這是一種遞迴轉成迴圈的寫法, 自己用 stack 模擬
06/01 21:07, 2F

06/01 21:09, , 3F
從某一個空位猜值, 看有沒有違反條件, 沒有就再猜下一個空位
06/01 21:09, 3F

06/01 21:09, , 4F
這一個通通猜過都不行, 就回前一個 +1 再往後猜
06/01 21:09, 4F

06/01 21:10, , 5F
stack 是用來存下 "前一個" 猜的是哪個位置
06/01 21:10, 5F

06/01 21:10, , 6F
樓上的方法跟我寫八皇后用的方法好像XD
06/01 21:10, 6F

06/01 21:11, , 7F
暴力法 Orz
06/01 21:11, 7F

06/01 21:16, , 8F
呃... 我只是在解釋原 po 程式的做法
06/01 21:16, 8F

06/01 21:17, , 9F
一般的搜尋不都是這麼做嗎 @@
06/01 21:17, 9F

06/01 22:25, , 10F
最典型的作法就是如此吧
06/01 22:25, 10F

06/02 04:12, , 11F
只是這樣程式碼會比較多 據我所知八皇后可以弄出個啥
06/02 04:12, 11F

06/02 04:13, , 12F
演算法 可惜我才疏淺薄 沒想出來 Orz
06/02 04:13, 12F

06/02 11:21, , 13F
一般遞迴搜尋很精簡吧 ? 就算是上面那樣程式也不多耶
06/02 11:21, 13F

06/02 11:22, , 14F
八皇后的別的方法是用馬步解嗎 ? XD
06/02 11:22, 14F
文章代碼(AID): #1A8yRs50 (C_and_CPP)
文章代碼(AID): #1A8yRs50 (C_and_CPP)