[問題] 騎士走棋盤問題

看板C_and_CPP作者 (steve)時間12年前 (2011/11/02 01:06), 編輯推噓2(2010)
留言12則, 2人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Visual C++ 問題(Question): 出現詭異的現象 預期的正確結果(Expected Output): 這是一個走西洋棋盤的騎士的問題 是 C++ how to program的題目 可是我的騎士走一走卻會發生不按規則走的情形 不知道如何是好 錯誤結果(Wrong Output): 沒有照日字形走 偶爾會掉進無窮迴圈 程式碼(Code):(請善用置底文網頁, 記得排版) http://pastie.org/2794322 補充說明(Supplement): 我覺得我的程式碼沒有問題 可是常常走一走騎士突然走歪 不知道為什麼... 並且有時候會掉進無窮迴圈.. 其中我的陣列board是棋盤 初始直是0 0表示騎士可以走 走過了就出現counter的數字 表示走過了 只能走64次 然後check函數是檢查該格附近是否還有可以走的地方 若是沒有了則跳出迴圈 剛剛忘了補充 ------------------------------------------------- 再補充一下 crr_row = current row crr_col = current column 可以代表現在位子的變數 hori vert陣列用來存放走的方法 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.132.83.187 ※ 編輯: steve1012 來自: 220.132.83.187 (11/02 01:11) ※ 編輯: steve1012 來自: 220.132.83.187 (11/02 01:12) ※ 編輯: steve1012 來自: 220.132.83.187 (11/02 01:16)

11/02 01:22, , 1F
這解法是用亂數產生下個可能解嗎 (猴子定理) ?
11/02 01:22, 1F

11/02 01:23, , 2F
是的話建議可以想想其他解題方式,猴子定理要完成的話..
11/02 01:23, 2F

11/02 01:24, , 3F
O(∞).
11/02 01:24, 3F
好像不是要可能解 這題只要我模擬一次就好 可是我每次都失敗 中間騎士走的地方會亂跳 並不程日字型 ※ 編輯: steve1012 來自: 220.132.83.187 (11/02 01:29)

11/02 01:37, , 4F
你在做初始化時,crr_row/crr_col就有可能逾界了,再套到
11/02 01:37, 4F

11/02 01:37, , 5F
board[<0][<0] ...
11/02 01:37, 5F
ok這個我改掉了 我直接用 moves=rand()%8; crr_row = moves; crr_col=moves;

11/02 01:40, , 6F
另外內層 do-while 會陷入 deap-loop 並不意外,
11/02 01:40, 6F

11/02 01:40, , 7F
想一下如果八個方位全都走過的話..
11/02 01:40, 7F
什麼意思 所以我有配check function避免發生全部走過的情形 我直接break跳出迴圈

11/02 01:44, , 8F
check function 裡面也要做邊界判斷...
11/02 01:44, 8F
為什麼呢?我已經在前面的do-while做過才走過來的 出界應該已經不會發生了呀 ※ 編輯: steve1012 來自: 220.132.83.187 (11/02 01:56)

11/02 01:56, , 9F
邊界判斷改好後,應該就可以,我run了大概10次。
11/02 01:56, 9F
這樣要怎麼做邊界判斷呢 可否提點一下小弟 若是發現出界要怎麼辦 並且我還是不懂為何check時會出界 前面do while不是避免了這樣的情況嗎 ※ 編輯: steve1012 來自: 220.132.83.187 (11/02 02:00)

11/02 02:00, , 10F
前面只保證a, b 不會出界,但不保證a + hori[i]。
11/02 02:00, 10F
!!!! 了解了 那要怎麼改 ※ 編輯: steve1012 來自: 220.132.83.187 (11/02 02:01)

11/02 02:02, , 11F
(a>7) || (b>7) || (a< 0) || (b<0) 寫成function
11/02 02:02, 11F

11/02 02:03, , 12F
把a + hori[i], b + veri[i] 帶入成為a , b
11/02 02:03, 12F
真的很感謝您 我解決了困擾 真的好謝謝你!!! 原來盲點這麼恐怖 ※ 編輯: steve1012 來自: 220.132.83.187 (11/02 02:06)
文章代碼(AID): #1Ei2SLQX (C_and_CPP)