繫白書上的一道佇列題,初來乍到談一下我對這個最短路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 ...