图的最短路径的Floyd-Warshall算法,为什么要把k放在最外层?
因为这种算法是基于动态规划思想
虽然看上去应该是下面这个样子:
dis[i][j] = Math.min(dis[i][j], dis[i][k] + dis[k][j]) where k from i to j.
但是实际上 应该是下面这个样子

这个公式才表示我们到底是选择k还是不选择k,但是不管怎么样 都是从上个状态k-1转移过来的。
然后我们可以发现最外一层空间可以省略,因为f(k)只和f(k-1)有关。所以dp阶段实际上是跟这个有关 所以我们必须先解决了k-1才能继续解决k的问题 所以要把放在最外层。

浙公网安备 33010602011771号