for(int k=1;k<=n;k++)

for(int i=1;i<=n;i++)

for(int j=1;j<=k;j++)

if(f[i][k]+f[k][j]<f[i][j])

f[i][j]=f[i][k]+f[k][j];

以上为floyed的基础模板。Floyed算法,用来计算这个图上任意点对间的距离,3重循环,简单思考便知道,k表示要i - k和k - j去尝试更新i – j。

Floyed算法最神奇的地方在于k循环的位置,为什么要放在最外层而不是最内层,简单思索后,放在最外层是用k点一次更新所有点的距离,而放在最内层则是将i—j的距离尝试用所有点k去更新,乍一看似乎没有什么区别?好像是一样的,但是我们实际手动推算就会发现,没有这么简单!(没错就是手推,虽然暴力,但是极其有效。)

我们来想想这有什么区别先:

外层:用k更新所有i—j

内层:枚举所有k来更新i—j

区别就在于这两种更新方式的顺序变了,那么放在内层会产生如何影响呢?

for(int i=1;i<=n;i++)

for(int j=1;j<=k;j++)

for(int k=1;k<=n;k++)

if(f[i][k]+f[k][j]<f[i][j])

f[i][j]=f[i][k]+f[k][j];

如果k层在最内层,就是每次更新i—j时都要枚举一遍k点,但实际上,i—k却没有更新过,所以导致i—j无法更新,然后就会产生恶性循环,然后boom的炸掉,到最后也许只有几个幸运点对成功更新出正确距离

但是在外层呢?我们不得不赞叹floyed算法的强大与神奇,因为k点一次更新了所有的点对,所以在进行后续更新操作时,i—k的距离是肯定被更新过了的,保证了算法的正确性,感觉之所以说floyed用到了动态规划思想的原因实际是下一个i—j中,距离是否被更新,只与与j直接相连的k点的所记录的值,即i—k和k—j这个定值有关。

这里就是DP所谓的阶段的问题了,floyed算法更多的还是DP的思想。

floyed算法的一些感想的更多相关文章

  1. POJ 3660 Cow Contest(传递闭包floyed算法)

    Cow Contest Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5989   Accepted: 3234 Descr ...

  2. floyed算法

    Floyed算法(实际是动态规划问题) 问题:权值矩阵matrix[i][j]表示i到j的距离,如果没有路径则为无穷 求出权值矩阵中任意两点间的最短距离 分析:对于每一对定点u,v看是否存在一个点w使 ...

  3. poj3259Wormholes (Bellman_Ford/SPFA/Floyed算法判断是否存在负环)

    题目链接:http://poj.org/problem?id=3259 题目大意:一个图,有n个顶点,其中有m条边是双向的且权值为为正,w条边是单向的且权值为负,判断途中是否存在负环,如果有输出YES ...

  4. Floyed算法 最短路径

    #include<iostream>#include<cstdio>int v,e,n; //v是顶点数,e是条数int v1[101][101],path[101][101] ...

  5. SDUT OJ 图结构练习——最短路径 ( Floyed 算法 AND Dijkstra算法)

    图结构练习——最短路径 Time Limit: 1000 ms            Memory Limit: 65536 KiB Submit Statistic Discuss Problem ...

  6. 关于 Bellman-Ford 与 Floyd 算法的一点感想

    在四种常用的最短路算法 Dijkstra, SPFA, floyd, Bellman-Ford 中, Dijks 和 SPFA 的使用较为普遍, 对大多数人来说, 也较为熟悉. 然而, floyd 与 ...

  7. POJ - 3660 Cow Contest 传递闭包floyed算法

    Cow Contest POJ - 3660 :http://poj.org/problem?id=3660   参考:https://www.cnblogs.com/kuangbin/p/31408 ...

  8. [ACM] 最短路算法整理(bellman_ford , SPFA , floyed , dijkstra 思想,步骤及模板)

    以杭电2544题目为例 最短路 Problem Description 在每年的校赛里,全部进入决赛的同学都会获得一件非常美丽的t-shirt. 可是每当我们的工作人员把上百件的衣服从商店运回到赛场的 ...

  9. Floyed(floyd)算法详解

    是真懂还是假懂? Floyed算法:是最短路径算法可以说是最慢的一个. 原理:O(n^3)的for循环,对每一个中间节点k做松弛(寻找更短路径): 但它适合算多源最短路径,即任意两点间的距离. 但sp ...

随机推荐

  1. hihocoder 1465 循环串匹配问题(后缀自动机)

    后缀自动机感觉好万能 tries图和ac自动机能做的,后缀自动机很多也都可以做 这里的循环匹配则是后缀自动机能做的另一个神奇功能 循环匹配意思就是S是abba, T是abb 问'abb', 'bba' ...

  2. NS产品演进

    NS产品演进 Citrix产品体系================ Citrix产品类别================ NS产品演进================ 产品联系方式========== ...

  3. [洛谷P2657][SCOI2009]windy数

    题目大意:不含前导零且相邻两个数字之差至少为$2$的正整数被称为$windy$数.问$[A, B]$内有多少个$windy$数? 题解:$f_{i, j}$表示数有$i$位,最高位为$j$(可能为$0 ...

  4. cdh版本的zookeeper安装以及配置(伪分布式模式)

    需要的软件包:zookeeper-3.4.5-cdh5.3.6.tar.gz  1.将软件包上传到Linux系统指定目录下: /opt/softwares/cdh 2.解压到指定的目录:/opt/mo ...

  5. B. Light It Up 思维题

    Recently, you bought a brand new smart lamp with programming features. At first, you set up a schedu ...

  6. angular-translate加载.json文件进行翻译

    这是这个demo的目录结构,总共有两个文件:locale-chinese.json和translation11.html locale-chinese.json文件的内容是: { "beau ...

  7. springMvc4+hibernate4+activiti5.15(Maven)

    首先创建activiti表 方式1.用代码创建 package createtable; import org.activiti.engine.ProcessEngineConfiguration; ...

  8. IntValue()方法 和 ValueOf()方法

    intValue() 1.intValue()是java.lang.Number类的方法,Number是一个抽象类.Java中所有的数值类都继承它.也就是说,不单是Integer有intValue方法 ...

  9. YDB基本使用详解(转)

    第七章YDB基本使用详解 一.如何与YDB对接(交互) 目前延云YDB提供如下几种方式 l命令行的方式 lWeb http接口的方式 lJDBC接口的方式 通过Java编程接入 通过可视化SQL分析统 ...

  10. codeforces 854 problem E

    E. Boredom Ilya is sitting in a waiting area of Metropolis airport and is bored of looking at time t ...