演算法模板之SPFA

2022-03-05 09:44:56 字數 695 閱讀 2613

bellman-ford能夠處理帶負權圖的單源最短路問題。(帶負勸環的圖,無法求出單源最短路)

bellman-ford的主要思想如下:

​ 給定一張有向圖,若對於圖中的某一條邊(x,y,z),有\(dist[y]<=dist[x]+z\)成立,則稱該邊滿足三角不等式。若所有邊都滿足三角不等式,則dist陣列就是所求最短路

bellman-ford的流程如下:

掃瞄所有的邊(x,y,z),若dist[y] > dist[x] + z , 則用dist[x] + z 更新 dist[y]

重複上述步驟,直到沒有更新操作發生。

spfa是在上述基礎上,使用佇列進行優化,核心思想就是說:只有已經被鬆弛的點,才可能去鬆弛其他的點。我們可以通過佇列來維護已經被鬆弛的點,那麼我們就不需要每次遍歷所有的邊了。

/**

鏈式前向星來存圖

int e[max_edge][2],hd[max_n],nxt[max_edge],top;

void add(int u,int v,int w)

**/// bellman-ford

while(true)}}

}for(int i=2;i<=n;i++)

return;

}private static void add(int u,int v,int w)

}

SPFA演算法模板

spfa shortest path faster algorithm 佇列優化 演算法是求單源 最短路徑 的一種演算法,在 bellman ford 演算法的基礎上加上乙個佇列優化,減少了冗餘的 鬆弛操作 是一種高效的最短路演算法。求單源最短路的spfa演算法的全稱是 shortest path ...

最短路SPFA演算法模板

其實如果是最短路的裸題的話是不用寫這種傳參的spfa的,直接定義全域性變數就好了,但是很多題都是要求兩點甚至更多點到其他點最短路,因此加上了引數。include include include include define maxn 10005 define inf 0x3f3f3f3f using...

最短路之SPFA模板

一 鄰接矩陣版本spfa 如果要判斷負環的話加乙個記錄入隊的陣列就行,當入隊次數大於n的時候出現負環 int d maxn vis maxn w maxn maxn int n void spfa int s 二 偽鄰接表版spfa const int inf 0x3f3f3f3f int v m ...