spfa演算法是寬搜優化版bellman-ford演算法。
這是一種基於鬆弛(relax)操作的最短路演算法。支援負權。
能找到某個結點出發到所有結點的最短路,或者報告某些最短路不存在。
演算法區別於bellman-ford的核心思想就是:只有當某個頂點u的d【u】發生改變時,它的鄰接點v的d【v】才可能被改變。
在此附上洛谷p3371模板題。
在此附上spfa版ac**:
#include
#include
using
namespace std;
int n, m, s, cnt;
struct bian edge[
1000000];
int head[
10005];
int dis[
10005];
int vis[
10005];
void
init()
}void
add(
int u,
int v,
int w)
intmain()
queue<
int> q;
q.push
(s);
vis[s]=1
; dis[s]=0
;while
(q.size()
)}}}
for(
int i=
1;i<=n;i++
)return0;
}
洛谷 P1144 最短路計數(最短路 SPFA)
傳送門 資料範圍看起來好像很嚇人,但我還是水過去了嘻嘻 先跑一遍spfa確定最短路長度,然後用記憶化搜尋累加答案 點1到點1的答案為1,然後遞迴搜尋,如果下乙個點在最短路徑上,我就把我的答案加上它的答案 code include include include struct nodea 400001...
spfa演算法(洛谷模板題)
一 概況 spfa演算法是常用的最短路演算法之一,複雜度還是非常可觀的。但缺點在於遇到稠密圖或者某些奇特的圖時可能會變慢。spfa演算法是一種單元演算法,選擇乙個出發點,計算它與其他點的最短距離。通過更新邊來不斷更新最短路。在圖論的最短路題中應用十分廣泛。二 過程 1.初始化每個節點到第乙個點的距離...
洛谷最短路計數SPFA
給出乙個n個頂點m條邊的無向無權圖,頂點編號為1 n。問從頂點1開始,到其他每個點的最短路有幾條。輸入格式 輸入第一行包含2個正整數n,m,為圖的頂點數與邊數。接下來m行,每行兩個正整數x,y,表示有一條頂點x連向頂點y的邊,請注意可能有自環與重邊。輸出格式 輸出包括n行,每行乙個非負整數,第i行輸...