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算法核心代码证明的更多相关文章

  1. Floyd算法(原理|代码实现)

    http://www.cnblogs.com/twjcnblog/archive/2011/09/07/2170306.html 正如我们所知道的,Floyd算法用于求最短路径.Floyd算法可以说是 ...

  2. 最短路径——Floyd算法(含证明)

    通过dij,ford,spfa等算法可以快速的得到单源点的最短路径,如果想要得到图中任意两点之间的最短路径,当然可以选择做n遍的dij或是ford,但还有一个思维量较小的选择,就是floyd算法. 多 ...

  3. [图论]Floyd 算法小结

    Floyd 算法小结  By Wine93 2013.11 1. Floyd算法简介 Floyd算法利用动态规划思想可以求出任意2点间的最短路径,时间复杂度为O(n^3),对于稠密图, 效率要高于执行 ...

  4. Floyd算法--一个人的旅行

    2017-07-27 22:37:32 writer:pprp 题目如下: 虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人 ...

  5. 数据结构与算法——弗洛伊德(Floyd)算法

    介绍 和 Dijkstra 算法一样,弗洛伊德(Floyd)算法 也是一种用于寻找给定的加权图中顶点间最短路径的算法.该算法名称以创始人之一.1978 年图灵奖获得者.斯坦福大学计算机科学系教授罗伯特 ...

  6. 最短路径——Floyd算法

    如何求一张图中任意两顶点之间的最短路径长度,这里写一种最简单的算法——Floyd算法: #include<stdio.h> #define inf 9999 int main() { ][ ...

  7. (poj 3660) Cow Contest (floyd算法+传递闭包)

    题目链接:http://poj.org/problem?id=3660 Description N ( ≤ N ≤ ) cows, conveniently numbered ..N, are par ...

  8. HDOJ 1217 Arbitrage(拟最短路,floyd算法)

    Arbitrage Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total ...

  9. 图的最短路径算法-- Floyd算法

    Floyd算法求的是图的任意两点之间的最短距离 下面是Floyd算法的代码实现模板: ; ; // maxv为最大顶点数 int n, m; // n 为顶点数,m为边数 int dis[maxv][ ...

随机推荐

  1. Emmet(之前叫Zencoding)插件安装

    按 ctr+shift+P,输入 install Package,找到emmet,确认安装 Package Control Messages======================== Emmet ...

  2. LightOj 1163 - Bank Robbery(x-x/10 = n求所有的 x )

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1163 题意:有一个数A,然后去掉A的最后一位得到B,先告诉你A-B的值,求所有满足条件 ...

  3. Dancing Stars on Me---hdu5533(判断是否为正多边形)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5533 题意:平面图中 有n个点给你每个点的坐标,判断是否能通过某种连线使得这些点所组成的n边形为 正n ...

  4. iOS 拉伸图片

    UIEdgeInsets:四个参数,会填入上左下右几个值,这几个值,代表着距离边界的这几个点描绘的区域,是不会拉伸的.所以,到时候,计算清楚这几个值就可以了.

  5. JS-006-表格元素操作

    直接上菜咯... 以下为 HTML 表格源码: <html> <head> <meta http-equiv="Content-Type" conte ...

  6. css中各种居中的奇技淫巧总结

    css中各种居中的奇技淫巧总结   第一种,在固定布局中比较常用的技巧设置container的margin:0 auto:   第二种(从布局中入手)   css .outer{ height:200 ...

  7. 如何用VS调试不属于解决方案的EXE和DLL程序

    如果你手里有一个现成的EXE, 以及EXE相关联PDB文件, 还有相关联的CPP文件和H文件. 你如何用VS调试? (当然你可以选择WinDbg.不过这里就讨论VS) 你或许想问我干嘛不从一开始就用V ...

  8. iOS -Swift 3.0 -Array(数组与可变数组相关属性及用法)

    // // ViewController.swift // Swift-Array // // Created by luorende on 16/9/12. // Copyright © 2016年 ...

  9. Mysql主从库同步错误:1062 Error 'Duplicate entry '1438019'

    mysql主从库同步错误:1062 Error 'Duplicate entry '1438019' for key 'PRIMARY'' on query mysql主从库在同步时会发生1062 L ...

  10. 使用duplicate target database ... from active database复制数据库

    使用duplicate target database ... from active database复制数据库 source db:ora11auxiliary db:dupdb 1.修改监听文件 ...