Re: [問題] random walk 邊界問題
行和列的問題弄好後,這個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
04/27 21:37, 2F
→
04/27 21:42, , 3F
04/27 21:42, 3F
→
04/27 22:11, , 4F
04/27 22:11, 4F
→
04/27 22:15, , 5F
04/27 22:15, 5F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):