floyd的dp理解

floyd算法是一个很常用的求多源最短路的算法,其采用的是动态规划思想,其模板中三层循环分别是kij(理解的难点)。

我们用表示和之间通过编号为的节点的最短路径。初值为原图的邻接矩阵。

可以从转移来,表示到不经过这个节点。也可以从转移过来,表示经过这个点。则转移方程为。

对于这个方程,我们在求解时必须先知道这样。我们发现k这重循环只需要上一层的值即可,而后两重都需要知道所有的值(可以想象成一个三维立方体,我们要求的是其顶部一个角上的值,而每一层只与上一层的值都有关)。所以我们将k在最外层循环(相当于升高层数),并将i和j放在内部循环(相当于求解每一层的值)。

因为只与有关,可以使用滚动数字,省略最外层一维空间。

你可能感兴趣的:(floyd的dp理解)