迷宮的最短路徑 BFS

2021-10-01 09:20:35 字數 1585 閱讀 9141

迷宮的最短路徑時間限制:1000 ms | 記憶體限制:65535 kb

難度:3

描述:給定乙個大小為n * m 的迷宮。迷宮由通道和牆壁組成,每一步可以向鄰接的上下左右四格的通道移動。請求出從起點到終點所需的最小步數。請注意,本題假定從起點一定可以移動到終點 。

限制條件: n , m<=100 。( # . s g 分別代表 牆壁、通道、起點和終點。)

輸入:第1行:兩個空格分隔的整數:n和m

輸出入n行m列的迷宮圖

輸出:輸出乙個整數,表示從起點到終點所需的最小步數。

樣例輸入:

樣例輸出:

22

剛剛完成深度優先搜尋的學習,理解記住兩個經典例子部分和問題

與 lake counting

#include

#include

#include

#include

using

namespace std;

typedef pair<

int,

int> p;

const

int inf=

99666

;char map[

1000][

1000];

int d[

1000][

1000];

//標記陣列

int dx[4]

=,dy[4]

=;int n,m,sx,sy,gx,gy;

intbfs()

que.

push(p

(sx,sy));

d[sx]

[sy]=0

;while

(que.

size()

)}}return d[gx]

[gy];}

intmain()

if(map[i]

[j]==

'g')

}int s=

bfs();

cout << s << endl;

for(

int i=

0;i,cout << endl)

for(

int j=

0;j)return0;

}

寬度優先搜尋與深度優先搜尋一樣,都會生成所有能夠遍歷到的狀態,因此需要對所有狀態進行處理時使用寬度優先搜尋也是可以的。但是遞迴函式可以很簡短地編寫,而且狀態的管理也更簡單,所以大多數情況下還是用深度優先搜尋實現。反之,在求取最短路時深度優先搜尋需要反覆經過同樣的狀態,所以此時還是使用寬度優先搜尋為好。

寬度優先搜尋會把狀態逐個加入佇列,因此通常需要與狀態數成正比的記憶體空間。反之,探度優先搜尋是與最大的遞迴深度成正比的。-般與狀態數相比,遞迴的深度並不會太大,所以可以認為深度優先搜尋更加節省記憶體。

改革尚未成功,同志仍需努力!!!

BFS 迷宮的最短路徑

迷宮的最短路徑 給定乙個大小為n m的迷宮。迷宮由通道和牆壁組成,每一步可以 向鄰接的上下左右四個方位的通道移動,請求出從起點到終點所需的最小不熟。此題假設一定能從起點到終點 限制條件 n,m 100 樣例 輸入 10 10 s g 輸出 22 include include includeusin...

迷宮的最短路徑 bfs

給定乙個大小為n m的迷宮,由通道 和牆壁 組成,其中通道s表示起點,通道g表示終點,每一步移動可以達到上下左右中不是牆壁的位置。試求出起點到終點的最小步數。本題假定迷宮是有解的 n,m 100 樣例輸入 樣例輸出 include include include using namespace st...

BFS 迷宮的最短路徑

迷宮的最短路徑 給定乙個大小為n m 的迷宮。迷宮由通道和牆壁組成,每一步可以向鄰接的上下左右四格的通道移動。請求出從起點到終點所需的最小步數。請注意,本題假定從起點一定可以移動到終點 限制條件 n m 100 s g 分別代表 牆壁 通道 起點和終點。sample input 10 10 s g ...