層序遍歷 求解迷宮問題

2021-09-28 01:29:35 字數 1416 閱讀 5098

求由(1,1)到終點的最短步數,並輸出對應的路徑。

1.利用層序遍歷,不斷擴充套件延伸。

2.用佇列儲存。儲存父親節點,找其所有的兒子節點。然後父節點出隊,兒子節點變為新父節點,然後找新父節點的所有兒子節點,以此類推。 

3.用陣列實現佇列。

/*層序遍歷實現廣度優先搜尋。 

*/#include"stdio.h"

#include"string.h"

int next[4][2]=,,,};//右,下,左,上。

int a[50][50];

int book[50][50];

struct node

;struct node queue[2501];

int main()

}for(i=1;i<=n;i++)//地圖輸入,從1開始符合習慣。  

} scanf("%d %d %d %d",&start_x,&start_y,&p,&q);

queue[head].x=start_x;//起點座標入隊  

queue[head].y=start_y; 

queue[head].step=0; 

book[start_x][start_y]=1;//這行別忘了講起點做入隊標記 ,否則會重複到起點1,1。無限次遍歷。 

rear++; //不要忘記這句,否則會把起點覆蓋。而且head==tial,進不去迴圈。 

while(head n||next_y <1||next_y>m)//越界判斷不要忘記否則會跳不出迴圈  

continue;//越界元素不入隊 

if(a[next_x][next_y]==0&&book[next_x][next_y]==0)//入隊條件判斷:不是障礙物,未曾入隊。 

if(next_x==p&&next_y==q)//與遞迴不同,層序遍歷,最先找到出口的座標,停止往下層拓展時,步數就是最短的。  }

if(flag==1) 

head++;//四個方向全部嘗試完畢,父節點出隊 

}printf("找到出口的步數是%d\n",queue[rear-1].step);//rear-1是最後乙個入隊的元素的位置。

int position;//儲存父節點位置  

position=rear-1;

printf("走出迷宮的最短軌跡是:(%d %d)

求解迷宮問題

求解迷宮問題 include using namespace std const int m 6 const int n 8 int maze m 2 n 2 m n大小的迷宮,0可前進,1通行受阻。並且在迷宮的周圍鑲上邊框 int mark m 2 n 2 儲存訪問標記,0未訪問,1已訪問 int...

迷宮問題求解

對於迷宮問題的求解,我們最後輸出的是迷宮的路徑,故符合佇列的先進先出特性,所以我們採用佇列的方式對迷宮進行求解 首先我們將建立乙個二維陣列 自定義初始化迷宮 7 7 int arr n n 二維陣列邊界用0填充,使之區域封閉,在實現過程 現陣列越界問題 接下來是 include include de...

問題 A 迷宮求解問題

時間限制 10 sec 記憶體限制 2048 mb 提交 574 解決 306 提交 狀態 討論版 用乙個m n的矩陣表示迷宮,0和1分別表示迷宮中的通路和障礙。設計乙個程式,對給定的迷宮,求出找到的第一條從入口到出口的通路,或得到沒有通路的結論。我們指定 1 迷宮的入口為矩陣的左上角 1,1 迷宮...