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.初始化每個節點到第乙個點的距離...