-
多源汇最短路(多起点终点) 1. Floyd算法 O()
基本思路:
- 初始化距离矩阵dist,表示任意两个顶点之间的距离。初始时,将两个顶点之间有边相连的距离设为边的权重,没有边相连的距离设为无穷大。
- 通过遍历每个顶点k,逐步更新距离矩阵dist: a. 对于每对顶点i和j,如果通过顶点k能够使得顶点i到顶点j的距离缩短,则更新dist[i][j]为dist[i][k] + dist[k][j]。
- 输出最短路径距离dist,即任意两个顶点之间的最短距离。
总结:
- 朴素Dijkstra算法适用于边权均为正数的单源最短路问题,但在稠密图中效率较低。
- 堆优化版Dijkstra算法通过使用最小堆优化,提高了算法的效率,适用于处理边权均为正数的单源最短路问题。
- Bellman-Ford算法适用于存在负边权的单源最短路问题,可以检测负权回路。
- SPFA算法在一般情况下具有较好的平均时间复杂度,但在最坏情况下可能会退化为O(nm)。
- Floyd算法适用于多源汇最短路问题,通过动态规划的方式计算任意两个顶点之间的最短路径,但时间复杂度较高。