看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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)
tropical72:這解法是用亂數產生下個可能解嗎 (猴子定理) ? 11/02 01:22
tropical72:是的話建議可以想想其他解題方式,猴子定理要完成的話.. 11/02 01:23
tropical72:O(∞). 11/02 01:24
好像不是要可能解 這題只要我模擬一次就好 可是我每次都失敗 中間騎士走的地方會亂跳 並不程日字型 ※ 編輯: steve1012 來自: 220.132.83.187 (11/02 01:29)
tropical72:你在做初始化時,crr_row/crr_col就有可能逾界了,再套到 11/02 01:37
tropical72:board[<0][<0] ... 11/02 01:37
ok這個我改掉了 我直接用 moves=rand()%8; crr_row = moves; crr_col=moves;
tropical72:另外內層 do-while 會陷入 deap-loop 並不意外, 11/02 01:40
tropical72:想一下如果八個方位全都走過的話.. 11/02 01:40
什麼意思 所以我有配check function避免發生全部走過的情形 我直接break跳出迴圈
bleed1979:check function 裡面也要做邊界判斷... 11/02 01:44
為什麼呢?我已經在前面的do-while做過才走過來的 出界應該已經不會發生了呀 ※ 編輯: steve1012 來自: 220.132.83.187 (11/02 01:56)
bleed1979:邊界判斷改好後,應該就可以,我run了大概10次。 11/02 01:56
這樣要怎麼做邊界判斷呢 可否提點一下小弟 若是發現出界要怎麼辦 並且我還是不懂為何check時會出界 前面do while不是避免了這樣的情況嗎 ※ 編輯: steve1012 來自: 220.132.83.187 (11/02 02:00)
bleed1979:前面只保證a, b 不會出界,但不保證a + hori[i]。 11/02 02:00
!!!! 了解了 那要怎麼改 ※ 編輯: steve1012 來自: 220.132.83.187 (11/02 02:01)
bleed1979:(a>7) || (b>7) || (a< 0) || (b<0) 寫成function 11/02 02:02
bleed1979:把a + hori[i], b + veri[i] 帶入成為a , b 11/02 02:03
真的很感謝您 我解決了困擾 真的好謝謝你!!! 原來盲點這麼恐怖 ※ 編輯: steve1012 來自: 220.132.83.187 (11/02 02:06)