C
1int main(void){ 2 int map[ROW][COL]; 3 int i, j, si, sj, gi, gj, found = 0; 4 int run = 1; 5 readMap(map, ROW); 6 si = 1; 7 sj = 1; 8 gi = 8; 9 gj = 10; 10 11 push(si); 12 push(sj); 13 14 while(!isStackEmpty() || found != 1){ 15 j = pop(); 16 i = pop(); 17 if (map[i][j] == map[gi][gj]){ 18 found = 1; 19 }else if (map[i][j] != WALL){ 20 push(i+1); 21 push(j); 22 push(i); 23 push(j+1); 24 } 25 run++; 26 printStack(); /*途中経過を知るためにここの時の各変数を結果に表示した*/ 27 printf("%d,%d,%d\n",i,j,run); 28 } 29 30 if(found == 1){ 31 printf("ゴールまでの経路あり\n"); 32 }else{ 33 printf("ゴールまでの経路なし\n"); 34 } 35 36 return 0; 37}
今迷路の探索のプログラムを書いているのですが、コンパイルして迷路を読み込むとどれも「ゴールまでの経路あり」とでます。これは13行目の終了条件の左側(スタックが空なら真の関数)にひっかかって、1回でループが終わってしまうからだと思います。関数は省略してます。
結果:STACK[]
1,1,1 (i,j,run,runがループ回数)
ゴールまでの経路あり
ここで問題なのがなんでpushされないのかです。i,jは1が入っているからpush(i+1)などしたのに結果のSTACK[]は何も入っていません。
なぜだかわかりますか?