迷宮的最短路徑時間限制: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 ...