Re: [問題] random walk 邊界問題

看板C_and_CPP作者 (十三)時間15年前 (2010/04/27 13:23), 編輯推噓1(104)
留言5則, 2人參與, 最新討論串2/2 (看更多)
行和列的問題弄好後,這個code會有無窮loop的問題。 我剛寫了code實際測試200次,會偶爾無窮loop。 關鍵在於以下情況。 ABC H D GFE 此時游標停在H,好巧不巧下一步要往右走。 ABC HID GFE 此時游標停在I,無論怎麼rand()都會碰到英文字母, ENG都加了又減回去,造成無窮loop。 Bleed ※ 引述《hazih (Hazih)》之銘言: : 題目是10*10的陣列 裡面先放'.' 陣列的[0][0]='A' : 以隨機亂數取4的餘數 0 1 2 3 為方向亂走 : 類似http://bit.ly/9BC3kK第二個圖 : 我有跑出結果 有結果的圖都是正確的 : 但是 : 偶爾會出現沒東西的結果 : 可是邊界判斷應該沒有錯吧.... : 問同學也沒有找到哪有錯誤 : 可以幫我看一下嗎 謝謝 : 以下是我random_walk的副程式 : int r=0; : char ENG=65; : int nx=0,ny=0; : rw[0][0]=ENG; : srand((unsigned)time(NULL)); : while( ENG != 90) : { : r= rand() % 4; // random 0~3 : ENG++; : switch(r){ : case(0): // up : if( (ny-1) > -1 && rw[nx][ny-1] == '.' ) : { : --ny; : rw[nx][ny]=ENG; : } : else : ENG--; : break; : case(1): // down : if( (ny+1) < y && rw[nx][ny+1] == '.' ) : { : ++ny; : rw[nx][ny]=ENG; : } : else : ENG--; : break; : case(2): // left : if( (nx-1) > -1 && rw[nx-1][ny] == '.' ) : { : --nx; : rw[nx][ny]=ENG; : } : else : ENG--; : break; : case(3): // right : if( (nx+1) < x && rw[nx+1][ny] == '.' ) : { : ++nx; : rw[nx][ny]=ENG; : } : else : ENG--; : break; : } : } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.177.97

04/27 21:31, , 1F
那我需要去控制他走死的狀態 讓他不會無限唄
04/27 21:31, 1F

04/27 21:37, , 2F
遞迴比較好辦,迴圈可能要多儲存些資訊來backtrack
04/27 21:37, 2F

04/27 21:42, , 3F
好 那我用遞迴試試 謝謝^^
04/27 21:42, 3F

04/27 22:11, , 4F
我的想法,可能程式每走一步都要FloodFill判斷夠空格走
04/27 22:11, 4F

04/27 22:15, , 5F
或是把死路都標記起來一路往後退。這樣應該比較快。
04/27 22:15, 5F
文章代碼(AID): #1BrkLd4f (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1BrkLd4f (C_and_CPP)