通过前一节对迪杰斯特拉算法的学习,主要解决从网(带权图)中某一顶点计算到其它顶点之间的最短路径问题。如果求有向网中每一对顶点之间的最短路径,使用迪杰斯特拉算法的解决思路是:以每一个顶点为源点,执行迪杰斯特拉算法。这样可以求得每一对顶点之间的最短路径。本节介绍另外一种解决算法,也就是弗洛伊德算法,该算法相比于使用迪杰斯特拉算法在解决此问题上的时间复杂度虽然相同,都为
O(n3)
,但是弗洛伊德算法的实现形式更简单。弗洛伊德的核心思想是:对于网中的任意两个顶点(例如顶点 A 到顶点 B)来说,之间的最短路径不外乎有 2 种情况:
- 直接从顶点 A 到顶点 B 的弧的权值为顶点 A 到顶点 B 的最短路径;
- 从顶点 A 开始,经过若干个顶点,最终达到顶点 B,期间经过的弧的权值和为顶点 A 到顶点 B 的最短路径。