迷宮的最短路徑 BFS演算法

2021-08-03 07:19:00 字數 815 閱讀 3056

繫白書上的一道佇列題,初來乍到談一下我對這個最短路spfa的演算法的理解 

首先佇列是先進先出,即push元素增加佇列尾部,pop移除佇列頭部的元素 

這個演算法注意要標記之前走過的位置,然後開乙個二維陣列封裝一下每個位置到起始點的最短距離 

在這些前提之下至於為什麼這樣是最短的,比如如果產生分岔的路,這多條分岔的路基本是同時行進的, 

如果走到了同乙個位置,先到的那條路已經把這個點走過了,做好了標記,其他的路就無法再走了,所以最短。 

源**:

#include#include#define maxn 120  

#define inf 1000000

using namespace std;

typedef pairp;

queueque;

char maps[maxn][maxn];

int sx,sy,ex,ey,n,m;

int d[maxn][maxn];

int dx[4] = ;

int dy[4] = ;

int bfs(int x,int y)

} }

return d[ex][ey];//改變此處的座標可以求出任意可以走到的點到起始點的最短距離

} int main()

if(maps[i][j] == 'g')

d[i][j] = inf;

} printf("%d\n",bfs(sx,sy));

return 0;

}

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 ...