迷宮的最短路徑(寬度優先搜尋)

2021-09-25 15:17:21 字數 1908 閱讀 5297

題目

給定乙個大小為n∣t

imes

mn|times m

n∣time

sm的迷宮。迷宮由通道和牆壁組成,每一步可以向鄰接的上下左右四個的通道移動,請求出從起點到終點所需的最小步數。限制條件n,m

≤100

n,m\le 100

n,m≤10

0。輸入(』#『,'.','s','g'分別表示牆壁、通道、起點和終點)

n=10

,m=12

n=10, m=12

n=10,m

=12#s######.#

......#..#

.#.##.##.#

.#........

##.##.####

....#....#

.#######.#

....#.....

.####.###.

....#...g#

輸出
分析

寬度優先搜尋按照距開始狀態由近即遠的順序進行搜尋,因此可以很容易地用來求最短路徑、最少操作之類問題的答案。

可以用d[n][m]陣列把最短距離儲存起來,用充分大得常數inf來初始化,這樣一來,尚未到達的位置就是inf

因為要向四個方向移動,用dx[4]dy[4]兩個陣列來表示四個方向向量,通過迴圈就可以實現四個方向移動得遍歷。

**

#include

#include

#include

using

namespace std;

#define max_size 100

#define inf 100000000

struct place

;char maze[max_size]

[max_size+1]

;int d[max_size]

[max_size]

;void

bfs(place s, place g,

int n,

int m)

, dy[4]

=;// 初始化距離陣列,賦乙個較大值inf

for(

int i=

0; i

)for

(int j=

0; j

) d[i]

[j]= inf;

queue que;

que.

push

(s);

d[s.x]

[s.y]=0

;while

(!que.

empty()

)}}//若輸出inf則為死迷宮,反之,輸出的是最短距離

printf

("%d\n"

, d[g.x]

[g.y]);

}int

main()

if(maze[i]

[j]==

'g')}}

// bfs遍歷

bfs(s, g, n, m)

;return0;

}

輸出

迷宮最短路徑 深度優先搜尋 C python

從迷宮的起點到終點的最短路徑,用深度優先搜尋 c實現 include int n,m,p,q,min 99999999 int a 100 100 book 100 100 void dfs int x,int y,int step if x p y q for k 0 k 3 k return i...

無權最短路 寬度優先搜尋

2017 09 13 21 54 52 writer pprp 圖論全部都忘記了,重新學一下吧,之前學的實在是太爛了 測試資料如下 7 12 頂點個數,路徑個數 3 11 4 1 22 4 2 54 3 4 54 6 4 73 6 5 76 7 3 起始點 如下 theme 無權最短路徑問題 com...

迷宮(深度搜尋 存最短路徑)

問題描述 定義乙個二維陣列 定義乙個5 5的陣列maze 5 5 它表示乙個迷宮,其中的1表示牆壁,0表示可以走的路,只能橫著走或豎著走,不能斜著走,要求程式設計序找出從左上角到右下角的最短路線。輸入 乙個5 5的二維陣列,表示乙個迷宮。資料保證有唯一解。輸出 左上角到右下角的最短路徑,格式如樣例所...