看板 C_and_CPP 關於我們 聯絡資訊
行和列的問題弄好後,這個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
hazih:那我需要去控制他走死的狀態 讓他不會無限唄 04/27 21:31
bleed1979:遞迴比較好辦,迴圈可能要多儲存些資訊來backtrack 04/27 21:37
hazih:好 那我用遞迴試試 謝謝^^ 04/27 21:42
bleed1979:我的想法,可能程式每走一步都要FloodFill判斷夠空格走 04/27 22:11
bleed1979:或是把死路都標記起來一路往後退。這樣應該比較快。 04/27 22:15