动态规划、最短路径、Floyd算法
来源:互联网 发布:wlan直连软件 编辑:程序博客网 时间:2024/05/16 14:44
正如我们所知道的,Floyd算法用于求最短路径。Floyd算法可以说是Warshall算法的扩展,三个for循环就可以解决问题,所以它的时间复杂度为O(n^3)。
Floyd算法的基本思想如下:
- 从任意节点A到任意节点B的最短路径不外乎2种可能:1是直接从A到B;2是从A经过若干个节点X到B。
- 所以,我们假设Dis(AB)为节点A到节点B的最短路径的距离,对于每一个节点X,我们检查Dis(AX) + Dis(XB) < Dis(AB)是否成立;
- 如果成立,证明从A到X再到B的路径比A直接到B的路径短,我们便设置Dis(AB) = Dis(AX) + Dis(XB),这样一来,当我们遍历完所有节点X,Dis(AB)中记录的便是A到B的最短路径的距离。
求最短路径的代码如下:
for (int k = 0; k < 节点个数; ++k ){ for (int i = 0; i < 节点个数; ++i ) { for (int j = 0; j < 节点个数; ++j ) { if ( Dis[i][k] + Dis[k][j] < Dis[i][j] ) { // 找到更短路径 Dis[i][j] = Dis[i][k] + Dis[k][j]; } } }}
同样Floyd算法其实是采用了动态规划的思想。可应用于求路径数、方案数等问题。
其中一个例子如下:求规定在L的长度内,从a走到b的方案数。
for(k=1; k<=l; k++){<span style="white-space:pre"></span>for(i=1; i<=n; i++){for(j=1; j<=n; j++){if(edge[i][j] == 1){ //如果从i能到达j //第k天到达j的方案数 += 第k-1天到达i的方案数 result[k][j] += result[k-1][i]; }}}}
0 0
- 动态规划、最短路径、Floyd算法
- 动态规划——Floyd最短路径算法
- 【动态规划】每对顶点之间的最短路径之Floyd-Warshall算法
- 动态规划---->每对定点之间的最短路径 Floyd(弗洛伊德)算法
- 动态规划之所有点对的最短路径问题(Floyd算法)
- Floyd算法:用动态规划求解多源(全源)最短路径
- [Qt][Floyd算法] 动态规划求解最短行驶路径 源码及演示程序
- 动态规划算法--最短路径问题
- 动态规划实例(十五):最短路径Floyd
- Floyd最短路径算法
- 最短路径(Floyd算法)
- 最短路径 floyd算法
- 最短路径--Floyd算法
- Floyd最短路径算法
- Floyd最短路径算法
- 最短路径Floyd算法
- 最短路径 Floyd算法
- Floyd最短路径算法
- windows下Django框架的搭建及测试教程
- 实习总结
- Eigrp md5认证
- ROS 教程之 navigation : 用 move_base 控制自己的机器人(2)
- Can't Find Theme.AppCompat.Light for New Android ActionBar Support
- 动态规划、最短路径、Floyd算法
- 重生, 燃烧的生命
- StringBuilder 、 StringBuffer 、 String
- hdfs增加ns之后,重启DN报clusterId不匹配错误
- 【Lucene教程】Luke
- hdu 2145 zz's Mysterious Present
- git 常用命令速查表
- 第一个IDE稳定版本:Google发布Android Studio 1.0
- Linux底层文件访问---read系统调用