迷宮問題一直是bfs的經典問題,之前也做了不少,但是一直都是那種求走的最短次數,今天遇到一題需要把最短路徑列印出來。所以就卡住了,看了不少別人的部落格,千篇一律地使用模擬佇列,可是為什麼不直接使用queue呢??
題目描述:
定義乙個二維陣列:
int maze[5][5] = ;
它表示乙個迷宮,其中的1表示牆壁,0表示可以走的路,只能橫著走或豎著走,不能斜著走,要求程式設計序找出從左上角到右下角的最短路線。
input
乙個5 × 5的二維陣列,表示乙個迷宮。資料保證有唯一解。
output
左上角到右下角的最短路徑,格式如樣例所示。
sample input
0 1 0 0 0
0 1 0 1 0
0 0 0 0 0
0 1 1 1 0
0 0 0 1 0
sample output
(0, 0)
(1, 0)
(2, 0)
(2, 1)
(2, 2)
(2, 3)
(2, 4)
(3, 4)
(4, 4)
題目分析:我首先按照以前對於bfs問題求解的模板做了一下,**如下:
#include
#include
#include
using
namespace
std;
struct mazea;
intmap[6][6];
int visited[6][6];
int dir[4][2] = , , , };
void init()
void bfs()
for(int i=0; i<4; i++)
}}int main()
}init();
bfs();
return
0;}
這就是以前經常遇到的水題,求出次數。
但是不會列印路徑啊,後來查別人的部落格,知道要用乙個陣列儲存每個點的父節點,這就是能夠列印路徑的關鍵。最後再用乙個dfs列印即可。
#include
#include
#include
using
namespace
std;
struct mazea;
struct par;
intmap[6][6];
int visited[6][6];
par par[6][6];//用來儲存父節點的陣列
int dir[4][2] = , , , };
void init()
void bfs()
for(int i=0; i<4; i++)
}}void dfs(int x, int y)
int main()
}init();
bfs();
dfs(4,4);
printf("(4, 4)\n");
return
0;}
迷宮問題bfs
迷宮問題 採用佇列的廣度優先遍歷 bfs 思想是從乙個頂點v0開始,輻射狀地優先遍歷其周圍較廣的區域 找到的解為最優解 include define m 8 define n 8 define maxsize 1000 typedef struct box typedef struct qutype...
迷宮問題BFS
the code 資料結構迷宮.cpp 定義控制台應用程式的入口點。include stdafx.h include include include include define n 4 定義迷宮為4 4 using namespace std struct pot 為記錄路徑的rec準備,座標 x...
迷宮問題bfs
小明置身於乙個迷宮,請你幫小明找出從起點到終點的最短路程。小明只能向上下左右四個方向移動。輸入包含多組測試資料。輸入的第一行是乙個整數t,表示有t組測試資料。每組輸入的第一行是兩個整數n和m 1 n,m 100 接下來n行,每行輸入m個字元,每個字元表示迷宮中的乙個小方格。字元的含義如下 s 起點 ...