算法 - 图(Graph)- 最短路径(Shortest Path)- Floyd(弗洛伊德算法)


Floyd

  • Floyd属于多源最短路径算法,能够求出任意2个顶点之间的最短路径,支持负权边
    时间复杂度:O(V³),效率比执行V次Dijkstra算法要好(V是顶点数量)
  • 算法原理
    从任意顶点i到任意顶点j的最短路径不外乎两种可能
  1. 直接从 i 到 j
  2. 从i经过若干个顶点到j
  • 假设 dist(i, j) 为顶点i到顶点j的最短路径的距离
  • 对于每一个顶点 k,检查dist(i, k) + dist(k, j) < dist(i, j) 是否成立
    如果成立,证明从i到k再到j的路径比i直接到j的路径短,设置dist(i, j) = dist(i, k) + dist(k, j)
    当我们遍历完成所有节点k,dist(i, j) 中记录的便是i到j的最短路径的距离
    在这里插入图片描述
发布了163 篇原创文章 · 获赞 18 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/songzhuo1991/article/details/103072453
今日推荐