Floyd算法为什么把k放在最外层?
关注者
228被浏览
90,45722 个回答
采用动态规划思想,f[k][i][j]表示i和j之间可以通过编号为1...k的节点的最短路径。
初值f[0][i][j]为原图的邻接矩阵。
则f[k][i][j]可以从f[k-1][i][j]转移来,表示i到j不经过k这个节点。
也可以从f[k-1][i][k]+f[k-1][k][j]转移过来,表示经过k这个点。
意思即f[k][i][j] = min(f[k-1][i][j] , f[k-1][i][k]+f[k-1][k][j])
然后你就会发现f最外层一维空间可以省略,因为f[k]只与f[k-1]有关。
虽然这个算法非常简单,但也需要找点时间理解这个算法,就不会再有这种问题啦。