在上述讲解中,举例所有点先经过1号点,##再经过2号点,得到一个经过1、2号点的最短路,比如4-3最短路是10。继续经过3号点、4号点...将所有点的最短路得到,因此经过的点的循环是在最外层的。
那么问题来了,经过1、2、3...n号点是按照顺序经过的,那么如果先枚举所有点经过2号点,再经过1号点,得到的最短路和上述方式结果一样么?
那么问题来了,经过1、2、3...n号点是按照顺序经过的,那么如果先枚举所有点经过2号点,再经过1号点,得到的最短路和上述方式结果一样么?
比如是这样的,我们把图形简单化,原来的1号点和2号点换一下位置:
只经过1号点
** f[2][3] = min(f[2][1] + f[1][3], f[2][3]) = 5 **
f[2][4] = min(f[2][1] + f[1][4], f[2][4]) = ∞
f[3][2] = min(f[3][1] + f[1][4], f[3][2]) = ∞
f[3][4] = min(f[3][1] + f[1][4], f[3][4]) = 1
f[4][2] = min(f[4][1] + f[1][2], f[4][2]) = 5
f[4][3] = min(f[4][1] + f[1][3], f[4][3]) = ∞
再累计经过2号点求最短
f[1][3] = min(f[1][2] + f[2][3], f[1][3]) = 3
f[1][4] = min(f[1][2] + f[2][4], f[1][4]) = ∞
f[3][1] = min(f[3][2] + f[2][1], f[3][1]) = ∞
f[3][4] = min(f[3][2] + f[2][4], f[3][4]) = 1
f[4][1] = min(f[4][2] + f[2][1], f[4][1]) = 7
**f[4][3] = min(f[4][2] + f[2][3], f[4][3]) = 5 + 5 =10**