迷路のアルゴリズムのコード
最終的に出てくる数列が、迷路の最短経路になるはずなのですが、うまくいきませんでした。
自分でも検証してみましたが、間違っているところのご指摘お願いします。
※課題の答え合わせをしているのではないかというご指摘がありましたので説明しますと、
この問題は平成31年度の筑波大学の編入試験の問題で、
答えが公開されていないため、以下のソースコードに誤りがあるところをお聞きできればと質問させていただいた次第です。
発生している問題
3503535353535 35353535353535 35353535353535 35353535353535 35353535353535 と表示されてしまう。 (目的の数列は以下) 3503535353535 3513578935 352356351035 353456735 3535353535835
該当のソースコード
C
1#include<stdio.h> 2#define X_size 7 3#define Y_size 5 4int maze[X_size][Y_size] = { 5 {1,1,1,1,1}, 6 {0,0,0,0,1},{1,1,1,0,1}, 7 {1,0,0,0,1},{1,0,1,0,1}, 8 {1,0,0,0,0},{1,1,1,1,1} 9}; 10int ok(int x, int y){ 11 if (maze[x][y]==0) 12 { 13 return 1; 14 }else{ 15 return 0; 16 } 17} 18int dist[X_size][Y_size]; 19void init_dist(void){ 20 int x,y; 21 for(int x=0; x < X_size; x++){ 22 for(int y =0; y < Y_size; y++){ 23 dist[x][y]= X_size * Y_size; 24 } 25 } 26} 27int update_dist(int x1,int y1,int x2,int y2){ 28 if(ok(x1,y1) == 1 && ok(x2,y2) == 1){ 29 if (dist[x2][y2] > dist[x1][y2] + 1){ 30 dist[x2][y2] = dist[x1][y1] + 1; 31 return 1; 32 } 33 } 34 return 0; 35} 36 37int main(void) { 38 int changed,x,y; 39 init_dist(); 40 dist[1][0]= 0; 41 do{ 42 changed=0; 43 for(y=0;y<Y_size;y++){ 44 for(x=0;x<X_size;x++){ 45 update_dist(x,y,x-1,y); 46 changed += update_dist(x,y,x-1,y); 47 update_dist(x,y,x+1,y); 48 changed += update_dist(x,y,x+1,y); 49 update_dist(x,y,x,y-1); 50 changed += update_dist(x,y,x,y-1); 51 update_dist(x,y,x,y+1); 52 changed += update_dist(x,y,x,y+1); 53 } 54 } 55 }while(changed); 56 for(y=0;y<Y_size;y++){ 57 for(x=0;x<X_size;x++){ 58 printf("%d",dist[x][y]); 59 } 60 printf("\n"); 61 } 62 return 0; 63}
試したこと
関数の宣言まではうまくいっていることは確認したので、mainのdo文の中がおかしいのかなとおもいます。
update_dist()がおかしいみたいです
補足情報
回答2件
あなたの回答
tips
プレビュー