迷宮問題(BFS)

2021-10-02 03:27:37 字數 1629 閱讀 8175

定義乙個二維陣列:

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 起點 ...