最短路算法floyd
2016-02-14 00:52
323 查看
内容:
对n个点(n<=450),已知他们的边,也就是相邻关系,求任意两个点的最短距离。代码:
for(int k=1; k<=n; k++)//k写在外面 for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) d[i][j]=min(d[i][j],d[i][k]+d[k][j]);
证明:参考
对于0~k,我们分i到j的最短路正好经过顶点k一次和完全不经过顶点k两种情况来讨论。不经过顶点k的情况下,d[k][i][j] = d[k-1][i][j]。
经过顶点k的情况,d[k][i][j] = d[k-1][i][k]+d[k-1][k][j]。
合起来就得到了d[k][i][j] = min(d[k-1][i][j],d[k-1][i][k]+d[k-1][k][j])。
这个DP也可以用同一个数组不断进行如下的操作:
d[i][j] = min(d[i][j],d[i][k]+d[k][j])的更新来实现。
时间复杂度
O(|V|³)。 450*450*450<10的8次方,V代表点的个数。待补充
相关文章推荐
- js验证输入,自定义错误提示
- [回文自动机]bzoj2342: [Shoi2011]双倍回文
- 集群监控_Ganglia使用入门
- 机器学习实践-Ch02 kNN分类算法
- MOOC Machine Learning 作业交流帖3
- Amazon coding 题解答
- QQ中对话框图片的拉伸问题
- 1038. Recover the Smallest Number (30)
- NodeJS 断言的使用
- html背景图片定位方法
- leetcode 83. Remove Duplicates from Sorted List
- Bestcoder Round 72# div2
- MOOC Machine Learning 作业交流帖2
- HDU5627--Clarke and MST (bfs+位运算)
- 有限状态机
- 数据结构热身
- 编写一个程序,把C语言的声明翻译成通俗语言
- c#实现简单金山打字小游戏(源码)
- 【备忘】Linux Samba 简易设置
- NSString转C语言翻转字符串