← 回首頁

Floyd-Warshall 全點對最短路

想像一張城市地圖,你想一次把「任兩座城市之間最短要開多久」全部算出來。有時候兩地直接開很遠,繞去中間某座城市轉一下反而更快——就像轉機常比直飛便宜。Floyd-Warshall 的辦法很直白:輪流把每一座城市當作「中轉站」,逐一檢查「先開到它、再從它出發,會不會讓某兩地之間變得更近」,全部試過一輪,任兩點之間的最短路徑就都算好了。下面你會看到一張距離矩陣隨著中轉站一格一格被刷新。

用動態規劃逐步嘗試每個節點作為「中繼點 k」,檢查是否能透過 k 縮短任意兩點 i→j 的距離: dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j])。 三層 k/i/j 迴圈跑完後,矩陣即為所有點對之間的最短距離;可正確處理負權邊(只要沒有負環)。

資料集:
中繼點 k:- 檢查中:- 更新次數:0
列 i、欄 j 皆為節點編號(0 起算);∞ 表示目前尚不可達;框線標記目前檢查的格子,發光標記中繼點所在的對角格。