也是搜尋手段是之一,它餘深度優先搜尋類似,從乙個起點出發探索所有可能的結果,是用佇列實現。
#define inf=0x3f3f3f3f;
const
int maxn=
1000
;//對節點的定義可以用struct 或者有乙個stl pair的用法
struct nodep,pp;
//typedef pairp;
char maze[maxn]
[maxn]
;//儲存迷宮,如果是那種棋盤的可以不用這個,要自己輸入
int m,n;
//實際的要搜尋的矩陣大小
int sx,sy;
//記錄開始搜尋位置
int ex,ey;
//記錄結束位置
int d[maxn]
[maxn]
;//記錄步數
int dx
;int dy
;//移動方式,存入陣列可以用for迴圈遍歷
intbfs()
}//先給每個點附上初值
p.x=sx;
p.y=sy;
que.
push
(p);
//把初始的起點壓入佇列開始遍歷
d[sx]
[sy]=0
;//令其實那個距離為0
while
(que.
size()
)}}return d[ex]
[ey];}
intmain()
poj 1915 knight moves
給測試組數,每組數,第乙個是這個棋盤的大小,然後就是起點與終點的座標,找出,從起點到終點的最小距離
題解
基本上套用上面那個模板就過了,還沒有模板複雜,不用輸入迷宮,然後騎士的走位有點不一樣,換好走位基本上就可以過了
**
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define inf 0x3f3f3f3f
#define ll long long
using namespace std;
//typedef pairp;
struct nodep,pp;
int dx[8]
=;int dy[8]
=;int d[
301]
[301];
int maze[
301]
[301];
int sx,sy;
int ex,ey;
int n;
intbfs()
} p.x=sx;
p.y=sy;
que.
push
(p);
d[sx]
[sy]=0
;while
(que.
size()
)}}return d[ex]
[ey];}
intmain()
return0;
}
寬度優先搜尋
include using namespace std const int n 700 const int inf 0x3f3f3f3f int dir 10 int n,a,b,ans 1000000 flag 0 int floor n struct node int check node tm...
寬度優先搜尋
寬度優先搜尋演算法 又稱廣度優先搜尋 是最簡便的圖的搜尋演算法之一,這一演算法也是很多重要的圖的演算法的原型。dijkstra單源最短路徑演算法和prim最小生成樹演算法都採用了和寬度優先搜尋類似的思想。其別名又叫bfs,屬於一種盲目搜尋法,目的是系統地展開並檢查圖中的所有節點,以找尋結果。換句話說...
寬度優先搜尋
寬度優先搜尋也是搜尋的手段之一。它與深度優先搜尋類似,從某個狀態出發探索所有可以到達的狀態。const int inf 100000000 使用pair表示狀態時,使用typedef會更加方便一些 typedef pair p char maze max n max m 1 表示迷宮的字串陣列 in...