2016-12-24 18 views
0

迷路内で最短経路を見つけるためのコードを書いてみたい。私はこれを書いた。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"); 
     } 

} 

このパスでは機能しますが、どのようにすればより一般的なものにすることができますか?私はスタックを理解できませんでした。あなたが私に道を示すことができるなら、私はそれを使うかもしれません。

編集:エンドポイントが追加されました。

ありがとうございました。 startendポイントはソリューションがBFS実行されている考慮

+0

エンドポイントや終了がありません。 –

+0

私は@WeatherVaneに同意します。あなたが '作品'の意味を不明瞭にしています。 'change()'は呼び出されていないように見えますが、それを見ると、ループが無期限にループするだけです。それはコーナーを見つけ、それから何度も何度も何度も歩き回ります。 'change()'を実行するバージョンがありますか? –

+0

あなたは[この回答](http://stackoverflow.com/a/34257513/4142924)と重複したリンクの以前の迷路の質問を見ることができます。 –

答えて

1

。(これは、ソリューションの1つです)

push s into queue with dist =0 
and mark s visited 
while(queue is not empty) 
{ 
    x = front(queue); 
    remove x from queue 
    foreach unvisited valid neighbor xn of x 
     mark xn as visited 
     push it in queue with dist d+1 where d is dist from source to x. 
} 
関連する問題