如现在只允许经过1号顶点,求任意两点之间的最短路程,应该如何求呢?只需判断e[i][1] e[1][j]是否比e[i][j]要小即可。e[i][j]表示的是从i号顶点到j号顶点之间的路程。e[i][1] e[1][j]表示的是从i号顶点先到1号顶点,再从1号顶点到j号顶点的路程之和。其中i是1~n循环,j也是1~n循环,代码实现如下↓
在只允许经过1号顶点的情况下,任意两点之间的最短路程更新为↓
通过上图我们发现:在只通过1号顶点中转的情况下,3号顶点到2号顶点(e[3][2])、4号顶点到2号顶点(e[4][2])以及4号顶点到3号顶点(e[4][3])的路程都变短了。
接下来继续求在只允许经过1和2号两个顶点的情况下任意两点之间的最短路程。如何做呢?我们需要在只允许经过1号顶点时任意两点的最短路程的结果下,再判断如果经过2号顶点是否可以使得i号顶点到j号顶点之间的路程变得更短。即判断e[i][2] e[2][j]是否比e[i][j]要小,代码实现为如下↓
在只允许经过1和2号顶点的情况下,任意两点之间的最短路程更新为: