Floyd算法核心代码证明
Flody
大家都知道这个最终模版:
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
那大家知道这个模版是怎么得出的吗?
核心思路:动态规划。
初始版本:
初始数组:dis(三维数组)
dis[i][j][k]表示i号到j号(只经过1~k号点)的路径
dis[i][j][0]=a[i][j](输入的数组)。
dis[i][j][n]表示从i到j可以经过n个点(其实就是怎么走都没问题)
dis[i][j][k-1]==>dis[i][j][k]
怎么通过一张初始的N*N的表得出最后的表?
dis[i][j][k]=?
i.....
.
.
j
如果不经过k号店,那么dis[i][j][k]=dis[i][j][k-1].
i....k
.
.
j
dis[i][j][k]=dis[i][j][k-1]+dis[k][j][k-1].
取最小值。
那么照着这个程序就是:
//两层循环省略
dis[i][j][0]=a[i][j]
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
dis[i][j][k]=min(dis[i][j][k-1],dia[i][k][k-1]+dis[k][j][k-1]);
第二版:
滚动数组
思路:
dis[*][*][k]=>dis1[*][*]
dis[*][*][k-1]=>dis0[*][*]
推倒这两个式子,可以得出滚动解法
for(int k=1;k<=n;k++)
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
dis1[i][j]=min(dis0[i][j],dis0[i][k]+dis0[k][j]);
dis0=dis1;//循环省略
}
实际上一直在优化空间
Flody算法更加适合稠密图,常用与多源最短路,求解稠密图于稀疏图时间一样。
Floyd算法核心代码证明的更多相关文章
- Floyd算法(原理|代码实现)
http://www.cnblogs.com/twjcnblog/archive/2011/09/07/2170306.html 正如我们所知道的,Floyd算法用于求最短路径.Floyd算法可以说是 ...
- 最短路径——Floyd算法(含证明)
通过dij,ford,spfa等算法可以快速的得到单源点的最短路径,如果想要得到图中任意两点之间的最短路径,当然可以选择做n遍的dij或是ford,但还有一个思维量较小的选择,就是floyd算法. 多 ...
- [图论]Floyd 算法小结
Floyd 算法小结 By Wine93 2013.11 1. Floyd算法简介 Floyd算法利用动态规划思想可以求出任意2点间的最短路径,时间复杂度为O(n^3),对于稠密图, 效率要高于执行 ...
- Floyd算法--一个人的旅行
2017-07-27 22:37:32 writer:pprp 题目如下: 虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人 ...
- 数据结构与算法——弗洛伊德(Floyd)算法
介绍 和 Dijkstra 算法一样,弗洛伊德(Floyd)算法 也是一种用于寻找给定的加权图中顶点间最短路径的算法.该算法名称以创始人之一.1978 年图灵奖获得者.斯坦福大学计算机科学系教授罗伯特 ...
- 最短路径——Floyd算法
如何求一张图中任意两顶点之间的最短路径长度,这里写一种最简单的算法——Floyd算法: #include<stdio.h> #define inf 9999 int main() { ][ ...
- (poj 3660) Cow Contest (floyd算法+传递闭包)
题目链接:http://poj.org/problem?id=3660 Description N ( ≤ N ≤ ) cows, conveniently numbered ..N, are par ...
- HDOJ 1217 Arbitrage(拟最短路,floyd算法)
Arbitrage Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...
- 图的最短路径算法-- Floyd算法
Floyd算法求的是图的任意两点之间的最短距离 下面是Floyd算法的代码实现模板: ; ; // maxv为最大顶点数 int n, m; // n 为顶点数,m为边数 int dis[maxv][ ...
随机推荐
- Android笔记:gson处理多层嵌套的复杂形式的json
当一个Class的字段属性中包含另一个class时gson能正常处理吗? 最初看到网上有说使用static的说法 经验证是不需要的 直接当普通类来用就可以了. 直接使用gson.fromJson方法即 ...
- dedecms程序给栏目增加缩略图的方法
用织梦程序做网站,有时候因为功能需求,我们要为网站的栏目页添加缩略图功能,而dedecms又没自带这个功能,那么就需要我们来修改程序了. 这里有一个栏目添加缩略图的方法,供大家参考. 涉及到文件如下( ...
- Sqlcompletefree
Sqlcompletefree SQLSERVER中SQL代码自动提示填充,自动格式化SQL语句工具Sqlcompletefree.方便开发操作.
- zero1--hibernate注解02
- js获取框架(IFrame)的内容
<frameset id="fr" rows="50%,50%"> <frame name="up" id=&q ...
- RHEL6解决无法使用YUM源问题
RHEL的YUM源需要注册用户才能更新使用,由于CentOS和RHEL基本没有区别,并且CentOS已经被REHL收购.所以将RHEL的YUM源替换为CentOS即可.问题如下:[root@bogon ...
- Android 使用shape来画线
注意:Android3.0以上系统开始支持硬件加速特性hardwareAccelerated,默认是启用的.当你的某个activity用到了“虚线”效果的时候,必须要设置AndroidManifest ...
- mysql中文乱码问题
1.mysql客户端在插入中文字符的时候可能出现乱码问题. 原因: 要解决字符集的问题,首先要知道现在的系统.数据库.表.客户端等使用什么样的字符集,以及系统支持什么字符集等. 2.我百度了好多,说 ...
- Request.url请求路径的一些属性
Request.url请求路径的一些属性1,Request.UrlReferrer.AbsolutePath=获取URL的绝对路径例:"/Manager/Module/OfficialMan ...
- iOS小技巧2
这段代码是实现了类似QQ空间"我的空间"里面的圆形头像 //圆形的头像 UIImageView * headImage = [[UIImageView alloc]initWith ...