day 14 最短路(三)

119 阅读1分钟
  1. 多源汇最短路(多起点终点) 1. Floyd算法 O(n3n^3)

    基本思路:

    1. 初始化距离矩阵dist,表示任意两个顶点之间的距离。初始时,将两个顶点之间有边相连的距离设为边的权重,没有边相连的距离设为无穷大。
    2. 通过遍历每个顶点k,逐步更新距离矩阵dist: a. 对于每对顶点i和j,如果通过顶点k能够使得顶点i到顶点j的距离缩短,则更新dist[i][j]为dist[i][k] + dist[k][j]。
    3. 输出最短路径距离dist,即任意两个顶点之间的最短距离。

总结:

  • 朴素Dijkstra算法适用于边权均为正数的单源最短路问题,但在稠密图中效率较低。
  • 堆优化版Dijkstra算法通过使用最小堆优化,提高了算法的效率,适用于处理边权均为正数的单源最短路问题。
  • Bellman-Ford算法适用于存在负边权的单源最短路问题,可以检测负权回路。
  • SPFA算法在一般情况下具有较好的平均时间复杂度,但在最坏情况下可能会退化为O(nm)。
  • Floyd算法适用于多源汇最短路问题,通过动态规划的方式计算任意两个顶点之间的最短路径,但时间复杂度较高。