參考博客優化
時間複雜度對比:spa
Dijkstra: O(n2) .net
Dijkstra + 優先隊列(堆優化): O(E+V∗logV) blog
SPFA: O(k∗E) ,k爲每一個節點進入隊列的次數,通常小於等於2,最壞狀況爲O(V∗E) 隊列
BellmanFord: O(V∗E) ,可檢測負圈get
Floyd: O(n3) 計算每對節點之間的最短路徑博客
結論:
① 當權值爲非負時,用Dijkstra。
② 當權值有負值,且沒有負圈,則用SPFA,SPFA能檢測負圈,可是不能輸出負圈。
③ 當權值有負值,並且可能存在負圈,則用BellmanFord,可以檢測並輸出負圈。
④ SPFA檢測負環:當存在一個點入隊大於等於V次時,則有負環。時間