迷宮的最短路徑
給定乙個大小為n * m 的迷宮。迷宮由通道和牆壁組成,每一步可以向鄰接的上下左右四格的通道移動。請求出從起點到終點所需的最小步數。請注意,本題假定從起點一定可以移動到終點 。
限制條件: n , m<=100 。( # . s g 分別代表 牆壁、通道、起點和終點。)
sample input
10 10#s
####
##.#
....
..#.
.#.#
.##.
##.#
.#..
....
..##
.##.
####
....
#...
.#.#
####
##.#
....
#...
...#
###.
###.
....
#...
g#sample output
解題思路: 走迷宮,而且是最短的路徑,可以用寬度優先搜尋按照開始狀態由近及遠的順序進行搜尋。
用pair來表示狀態(座標),d[max] [max]陣列來表示所走的步數(d[max] [max]應與迷宮一樣大,d[max] [max] 上座標的數值代表從s出發走到該座標的步數)。
首先把s點的位置放入佇列裡(把初始狀態放入佇列裡)並設定步數為0 ,然後朝四個方向搜尋**移),把可以轉移的並且未訪問的狀態加入佇列裡面(步數加一 ),如此往復直到搜尋到終點的位置或隊列為空。
#include#include#define max_n 100
#define max_m 100
using namespace std;
const int inf = 100000000;
typedef pairp;
char maze[max_n][max_m+1];
int n,m;
int sx,sy;
int gx,gy;
int d[max_n][max_m+1];
int dx[4]=,dy[4]=;
int bfs()
{ queueque;
for(int i=0;i在這立個flag:
1. 每週寫一篇有質量的blog(這幾篇太水了,簡直無法直視。。。)
2. 每週安排自己相應的學習任務(快點學啊。。。)
3. ta 現在很好所以你可以放心了(這個不是flag。。。)
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
迷宮的最短路徑時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 給定乙個大小為n m 的迷宮。迷宮由通道和牆壁組成,每一步可以向鄰接的上下左右四格的通道移動。請求出從起點到終點所需的最小步數。請注意,本題假定從起點一定可以移動到終點 限制條件 n m 100 s g 分別代表 ...