定義乙個二維陣列:
int maze[5][5] = ;
它表示乙個迷宮,其中的1表示牆壁,0表示可以走的路,只能橫著走或豎著走,不能斜著走,要求程式設計序找出從左上角到右下角的最短路線
乙個5 × 5的二維陣列,表示乙個迷宮。資料保證有唯一解。
左上角到右下角的最短路徑,格式如樣例所示。
010
0001
0100
0000
0111
0000
10
(0,
0)(1
,0)(
2,0)
(2,1
)(2,
2)(2
,3)(
2,4)
(3,4
)(4,
4)
首先,路徑的每乙個結點都有基本屬性:點座標(x,y),因此可以使用結構體來建立結點,其次,由於除起點外的其他所有點都是由上乙個點轉移而來的,因此我們稱這個「上乙個點」為父結點,為了使每條路線的每乙個結點之間都能被連線在一起,我們要在結構體裡加入第三個成員:父結點,這第三個成員可以通過pair來建立,這樣就可以使得每條路線的結點被連線在一起,最後,通過陣列1來存放每個結點,再通過父節點找出最短路線的每個結點並存放在陣列2
具體**如下:
#include
#include
#include
#include
using
namespace std;
int dir[4]
[2]=
,,,//左右上下 };
struct node
;int maze[5]
[5]=
;node path[25]
=;//存放訪問過的結點
queueser;
int u=0;
void
bfs();
intcheck
(node x)
;int
main()
}bfs()
; node p[25]
;//存放最短路線路徑
int j=0;
pair<
int,
int>t=path[u-1]
.f;for
(int i=u-
1;i>=
0;i--)}
for(
int i=j-
1;i>=
0;i--
) cout<<
"(4, 4)"
;return0;
}void
bfs();
path[u++
]=start;
node end=
; ser.
push
(start)
;while
(!ser.
empty()
) ser.
pop();
for(
int i=
0;i<
4;i++)}
}}intcheck
(node x)
//檢查邊界
迷宮問題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 起點 ...