BFS 迷宮的最短路徑

2021-08-28 15:24:21 字數 1314 閱讀 8230

迷宮的最短路徑

給定乙個大小為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 分別代表 ...