最短路径算法总结
简介
最短路
在一个图中有 n 个点、m 条边。边有权值,权值可正可负。边可能是有向的,也可能是无向的。给定两个点,起点是 s,终点是 t,在所有能连接 s 和 t 的路径中寻找边的权值之“和” 最小的路径,这就是最短路径问题。
最短路有两种:
-
单源最短路:从单个节点出发,到所有节点的最短路;
-
多源最短路:整个图中所有点到其他点的最短路。
总结
算法 | 应用场景 | 时间复杂度 | 处理负权边 | 处理负权回路 |
---|---|---|---|---|
\(BFS\) | 无权图 | \(O(E+V)\) | - | - |
\(Floyd\) | 加权图、多源最短路径 | \(O(V^3)\) | \(\checkmark\) | \(\times\) |
\(Dijkstra\) | 边为正权、单源最短路径 | \(O(E \times logE)\) | \(\times\) | \(\times\) |
\(Bellman-Ford\) | 存在负权边、单源最短路径 | \(O(V \times E)\) | \(\checkmark\) | \(\checkmark\) |
\(SPFA\) | 存在负权边、单源最短路径 | \(O(V \times E)\) | \(\checkmark\) | \(\checkmark\) |
参考