單源最短路徑之SPFA演算法實現

2021-06-08 02:59:20 字數 1249 閱讀 1044

這裡來簡單介紹下spfa演算法。

1、spfa演算法是求解單源最短路徑的,時間複雜度為0(kn),一般k<2。所以該演算法高效。

2、以下的**借助stl中的vector,用臨界表來儲存圖的。

3、如果要輸出一條最短路徑對應的路線,我們可以用source表來記錄。例如source[a]=b,

表示a的前驅為b。這樣在執行完spfa演算法後,就會得到一張source表。然後從end向前一直,

找到start為止。就可產生一條路徑了。當然,以上所說的只是比較簡單的。比如要求在有多條

路徑時列印經過節點最少的、字典序順序小的。。。

4、spfa演算法不僅可以判斷有向圖、無向圖任意兩點之間是否有路徑可達,還可以給出實際值。

**:

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

const int maxn=1001;

const int inf=0x7fffffff;

struct edge //邊

; vectormyv[maxn]; //利用臨界表儲存圖

int numnode,numedge; //頂點數、邊

int minpath[maxn]; //最短路

int source[maxn]; //source[a]=b,說明a的前驅為b

int start,end; //起點、終點

bool inq[maxn]; //是否入隊

void inputitial()

while(!s.empty())

printf("\n");

printf("total cost : %d\n\n",minpath[end]);

} }

void spfa(int start,int end) //最短路徑快速演算法 shortest path faster algorithm}}

inq[now]=false;

}output(start,end);

}

int main()

}system("pause");

return 0;

}

簡單的小測試:

單源最短路徑 SPFA演算法

求單源最短路徑的spfa演算法在bellman ford演算法的基礎上進行了改進,使其在能夠計算帶負權圖的單源最短路徑的基礎上,時間複雜度大幅度降低。時間複雜度 o k e k 2 基本演算法 設立乙個先進先出的佇列來儲存待優化的節點,優化時每次取出隊首節點u,並且用u點當前的最短路徑估計值對離開u...

Spfa單源最短路徑演算法

spfa 全稱shortest path faster algorithm,是求單源最短路徑的一種演算法.跟dijkstra類似,但是有一些不一樣。由於本人弱,不知道 有區別,請各位大神補充 我們來建乙個圖。首先,我們用e陣列表示各邊的關係,如下是初始狀態。我們開乙個dis陣列來儲存1號點到各點的最...

單源最短路徑 SPFA

給出乙個有向圖,請輸出從某一點出發到所有點的最短路徑長度。第一行包含三個整數n m s,分別表示點的個數 有向邊的個數 出發點的編號。接下來m行每行包含三個整數fi gi wi,分別表示第i條有向邊的出發點 目標點和長度。一行,包含n個用空格分隔的整數,其中第i個整數表示從點s出發到點i的最短路徑長...