迷路内で最短経路を見つけるためのコードを書いてみたい。私はこれを書いた。Cの迷路で最短経路を見つける
#include <stdio.h>
void change (void);
void print(void);
int labirent[13][13] = {
{1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,2,0,1,0,0,0,0,0,0,0,0,1},
{1,0,0,1,0,0,1,0,1,1,1,1,1},
{1,0,0,1,0,0,1,0,0,0,0,0,1},
{1,0,0,0,0,0,1,0,0,0,0,0,1},
{1,0,0,0,0,1,1,1,1,0,0,0,1},
{1,0,1,1,1,1,1,0,0,0,0,0,1},
{1,0,0,0,0,1,0,0,0,1,1,1,1},
{1,0,0,0,0,1,0,0,0,0,0,0,1},
{1,1,1,1,0,1,0,0,1,1,0,0,1},
{1,0,0,0,0,1,0,0,1,0,0,1,1},
{1,0,0,0,0,0,0,0,1,0,0,3,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1}
};//defining labyrinth - walls are (1), starting point is (2), null points are (0), end point is (3)
int i = 3;
int a = 0;
int x=1, y=1;//current positions
int main(){
change();
print();
return 0;
}
void change(){
if(labirent[x+1][y]==0){
labirent[x+1][y]=i;
x = x + 1;
change();
}else if(labirent[x][y+1]==0){
labirent[x][y+1]=i;
y = y+1;
change();
}else if(labirent[x-1][y]==0){
labirent[x-1][y]=i;
x = x-1;
change();
}else if(labirent[x][y-1]==0){
labirent[x][y-1]=i;
y = y -1;
change();
}
}
void print(){
for(int i=0;i<13;i++){
for(int j=0;j<13;j++){
printf("%d ",labirent[i][j]);
}
printf("\n");
}
}
このパスでは機能しますが、どのようにすればより一般的なものにすることができますか?私はスタックを理解できませんでした。あなたが私に道を示すことができるなら、私はそれを使うかもしれません。
編集:エンドポイントが追加されました。
ありがとうございました。 start
とend
ポイントはソリューションがBFS実行されている考慮
エンドポイントや終了がありません。 –
私は@WeatherVaneに同意します。あなたが '作品'の意味を不明瞭にしています。 'change()'は呼び出されていないように見えますが、それを見ると、ループが無期限にループするだけです。それはコーナーを見つけ、それから何度も何度も何度も歩き回ります。 'change()'を実行するバージョンがありますか? –
あなたは[この回答](http://stackoverflow.com/a/34257513/4142924)と重複したリンクの以前の迷路の質問を見ることができます。 –