SPFA演算法模板

2021-07-04 16:29:45 字數 1550 閱讀 2899

spfa(shortest path faster algorithm)(佇列優化)演算法是求單源

最短路徑

的一種演算法,在

bellman-ford

演算法的基礎上加上乙個佇列優化,減少了冗餘的

鬆弛操作

,是一種高效的最短路演算法。求單源最短路的spfa演算法的全稱是:shortest path faster algorithm,是

西南交通大學

段凡丁于2023年發表的。

原理是從原點出發,遍歷與之相連的頂點,不斷更新節點的值,將更新了的結點放進佇列中,而且用

鄰接表來儲存圖。一般用來解決邊較少的稀疏圖。期望的

時間複雜度

:o(ke), 其中k為所有頂點進隊的平均次數,可以證明k一般小於等於2。

#include#include#include#include#include#include#include#include#includeusing namespace std;

#define inf 0x3f3f3f3f //定義乙個很大的數

queueque;

vectorvv[100];

int v_count,l_count; //頂點數和邊數

//int book[100][100]; //book記錄某頂點是否走過

long long v[100]; //v記錄起點到該頂點走的最小距離

int d[100][100]; //d記錄兩頂點之間距離

int a,b,d;

int len,t;

int main() //頂點編號從 1 --- v_count 初始點為 1

while(!que.empty()) que.pop(); //清空

//memset(book,0,sizeof(book));

v[1] = 0;

for(int i=1;i<=l_count;i++)

que.push(1); //初始點放入

while(!que.empty())

}que.pop(); //拿出該點

} for(int i=1;i<=v_count;i++)

/*

測試資料:

6 91 2 7

1 3 9

1 6 14

2 3 10

2 4 10

3 4 11

3 6 2

4 5 5

5 6 9

6 91 2 7

1 3 2

1 6 14

2 3 2

2 4 10

3 4 11

3 6 2

4 5 5

5 6 9

*/

演算法模板之SPFA

bellman ford能夠處理帶負權圖的單源最短路問題。帶負勸環的圖,無法求出單源最短路 bellman ford的主要思想如下 給定一張有向圖,若對於圖中的某一條邊 x,y,z 有 dist y dist x z 成立,則稱該邊滿足三角不等式。若所有邊都滿足三角不等式,則dist陣列就是所求最短...

最短路SPFA演算法模板

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

spfa演算法(洛谷模板題)

一 概況 spfa演算法是常用的最短路演算法之一,複雜度還是非常可觀的。但缺點在於遇到稠密圖或者某些奇特的圖時可能會變慢。spfa演算法是一種單元演算法,選擇乙個出發點,計算它與其他點的最短距離。通過更新邊來不斷更新最短路。在圖論的最短路題中應用十分廣泛。二 過程 1.初始化每個節點到第乙個點的距離...