首页 > 代码库 > Floyd最短路算法的解释.
Floyd最短路算法的解释.
适用于有向/无向图,本质上是一个动态规划.
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最短路算法的解释.
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。