Floyd:每對節點之間的最短路徑。Floyd-Warshall算法(Floyd-Warshall
algorithm)是解決任意兩點間的最短路徑的壹種算法,可以正確處理有向圖或負權的最短路徑問題,同時也被用於計算有向圖的傳遞閉包。Floyd-Warshall算法的時間復雜度為O(N3),空間復雜度為O(N2)。
Dijkstra: O(n2) 適用於 權值為非負 的圖的單源最短路徑,用斐波那契堆的復雜度O(E+VlgV),
BellmanFord:適用於權值有負值的圖的單源最短路徑,並且能夠檢測負圈,復雜度O(VE)
SPFA:適用於權值有負值,且沒有負圈的圖的單源最短路徑,論文中的復雜度O(kE),k為每個節點進入Queue的次數,且k壹般<=2,但此處的復雜度證明是有問題的,其實SPFA的最壞情況應該是O(VE).
先給出結論:
(1)當權值為非負時,用Dijkstra。
(2)當權值有負值,且沒有負圈,則用SPFA,SPFA能檢測負圈,但是不能輸出負圈。
(3)當權值有負值,而且可能存在負圈,則用BellmanFord,能夠檢測並輸出負圈。
(4)SPFA檢測負環:當存在壹個點入隊大於等於V次,則有負環,後面有證明。