-
图(Graph)
-
图(Graph)- 最短路径(Shortest Path)
-
图(Graph)- 最短路径(Shortest Path)- Dijkstra(迪杰斯特拉算法)
-
图(Graph)- 最短路径(Shortest Path)- Bellman-Ford(贝尔曼-福特算法)
Floyd
- Floyd属于多源最短路径算法,能够求出任意2个顶点之间的最短路径,支持负权边
时间复杂度:O(V³),效率比执行V次Dijkstra算法要好(V是顶点数量) - 算法原理
从任意顶点i到任意顶点j的最短路径不外乎两种可能
- 直接从 i 到 j
- 从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的最短路径的距离