這裡來簡單介紹下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的最短路徑長...