码迷,mamicode.com
首页 > 编程语言 > 详细

Floyd最短路算法的解释.

时间:2017-06-13 17:03:21      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:nbsp   空间   stack   算法   logs   过程   程序   状态转移方程   动态   

适用于有向/无向图,本质上是一个动态规划.

D[k][i][j]代表经前k个结点中转,i到j的距离.可以写出方程:

D[k][i][j]=min{D[k-1][i][j], D[k-1][i][k]+D[k-1][k][j]}.

比如一个路径5->1->4->2->3.

k=1时,算出了5->4的最短路.k=2时,计算了4->3,k=3时,无改变.k=4时,计算5->3,k=5,无改变.

最后,算出了5->3的最短路.

观察这个过程,发现路径中的任意一个结点,何时经过它来优化最短路,它出现的先后顺序,完全无所谓.即无后效性.

而这个状态转移方程可以用流动数组原理优化.在空间缩减一维.

程序写为:

for (int k=0; k<n; k++)
    for (int i=0; i<n; i++)
        for (int j=0; j<n; j++)
            if (D[i][k] + D[k][j] < D[i][j])
                D[i][j] = D[i][k] + D[k][j];

 

 

Floyd最短路算法的解释.

标签:nbsp   空间   stack   算法   logs   过程   程序   状态转移方程   动态   

原文地址:http://www.cnblogs.com/yujinding/p/7001203.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!