演算法圖鑑
Graph Algorithms · 比較表

最短路徑演算法比較

BFS、Dijkstra、Bellman-Ford、Floyd-Warshall、DAG 最短路徑:邊權、負邊、單源或全點對,一張表看完該用哪一個。

演算法時間空間邊權負邊範圍難度
BFS廣度優先搜尋O(V+E)O(V)全部相同(無權)單源入門
Dijkstra單源最短路徑O((V+E) log V)O(V)非負單源進階
Bellman-Ford含負權最短路徑O(VE)O(V)任意✓,且能偵測負環單源困難
Floyd-Warshall全點對最短路徑O(V³)O(V²)任意✓(負環看對角線)全點對困難
Shortest Path in DAGDAG 最短路徑O(V+E)O(V)任意✓(無環所以沒有負環)單源進階

什麼時候選哪一個

選擇指南

  • 無權 → BFS。非負權 → Dijkstra。有負邊 → Bellman-Ford。無環 → DAG 拓撲鬆弛。全點對且 V 小 → Floyd-Warshall。
  • 邊權只有 0 和 1 → 0-1 BFS(deque,權 0 放前面、權 1 放後面),O(V+E) 而不用 Dijkstra 的 log。
  • 全點對但 V 大、邊稀疏 → 對每個點跑一次 Dijkstra,V·(V+E) log V 通常比 V³ 快得多。
  • 最長路徑 → 一般圖是 NP-hard;DAG 上把邊權取負跑最短路徑,或直接在拓撲序上取 max。
  • 只要知道能不能到、不在乎距離 → DFS 或 Union-Find 就夠,不必上最短路徑。