最短路徑
我們把邊具有權重的圖稱為帶權圖,權重可以理解為兩點間的距離。一個圖中任意兩點會有多條路徑聯通,最短路徑就是這些路徑中最短的一條。
負環:環中所有邊權之重和小於0的環
Floyed演算法
演算法思想
如何讓兩個點(假設a到b)的距離變短,只能引入第三個點k,透過k進行中轉即a->k->b,當然中轉點可以是多個。
演算法分析
使用鄰接矩陣E儲存圖,每個格子E(i, j)表示點i到點j的最短距離,不相鄰的距離為Infinity。遍歷每一個點作為中轉點k,更新點i與點j的最短路徑。
const E: number[][] = []
for(let k=1; i<=n; i++){ // 遍歷中轉點
// 點i到點j的最短距離更新
for(let i=1; i<=n; i++) {
for(let j=1; j<=n; j++) {
E[i][j] = Math.min(E[i][j], E[i,k]+E[k,j])
}
}
}
演算法總結
時間複雜度:O(n^3)
Floyed演算法適用於有負權邊的圖;但不適用於有負權環的圖。