傻子也能看懂的弗洛伊德算法(转)
假如现在只允许经过1号顶点,求任意两点之间的最短路程,应该如何求呢?只需判断e[i][1]+e[1][j]是否比e[i][j]要小即可。e[i][j]表示的是从i号顶点到j号顶点之间的路程。e[i][1]+e[1][j]表示的是从i号顶点先到1号顶点,再从1号顶点到j号顶点的路程之和。其中i是1~n循环,j也是1~n循环,代码实现如下。
for(i=1;i<=n;i++)
- {
- for(j=1;j<=n;j++)
- {
- if ( e[i][j] > e[i][1]+e[1][j] )
- e[i][j] = e[i][1]+e[1][j];
- }
- }
在只允许经过1号顶点的情况下,任意两点之间的最短路程更新为:
- //经过1号顶点
- for(i=1;i<=n;i++)
- for(j=1;j<=n;j++)
- if (e[i][j] > e[i][1]+e[1][j]) e[i][j]=e[i][1]+e[1][j];
- //经过2号顶点
- for(i=1;i<=n;i++)
- for(j=1;j<=n;j++)
- if (e[i][j] > e[i][2]+e[2][j]) e[i][j]=e[i][2]+e[2][j];
在只允许经过1和2号顶点的情况下,任意两点之间的最短路程更新为:
- for(k=1;k<=n;k++)
- for(i=1;i<=n;i++)
- for(j=1;j<=n;j++)
- if(e[i][j]>e[i][k]+e[k][j])
- e[i][j]=e[i][k]+e[k][j];
这段代码的基本思想就是:最开始只允许经过1号顶点进行中转,接下来只允许经过1和2号顶点进行中转……允许经过1~n号所有顶点进行中转,求任意两点之间的最短路程。用一句话概括就是:从i号顶点到j号顶点只经过前k号点的最短路程。
- #include <stdio.h>
- int main()
- {
- int e[10][10],k,i,j,n,m,t1,t2,t3;
- int inf=99999999; //用inf(infinity的缩写)存储一个我们认为的正无穷值
- //读入n和m,n表示顶点个数,m表示边的条数
- scanf("%d %d",&n,&m);
- //初始化
- for(i=1;i<=n;i++)
- for(j=1;j<=n;j++)
- if(i==j) e[i][j]=0;
- else e[i][j]=inf;
- //读入边
- for(i=1;i<=m;i++)
- {
- scanf("%d %d %d",&t1,&t2,&t3);
- e[t1][t2]=t3;
- }
- //Floyd-Warshall算法核心语句
- for(k=1;k<=n;k++)
- for(i=1;i<=n;i++)
- for(j=1;j<=n;j++)
- if(e[i][j]>e[i][k]+e[k][j] )
- e[i][j]=e[i][k]+e[k][j];
- //输出最终的结果
- for(i=1;i<=n;i++)
- {
- for(j=1;j<=n;j++)
- {
- printf("%10d",e[i][j]);
- }
- printf("\n");
- }
- return 0;
- }
傻子也能看懂的弗洛伊德算法(转)相关推荐
- Floyd-傻子也能看懂的弗洛伊德算法
暑假,小哼准备去一些城市旅游.有些城市之间有公路,有些城市之间则没有,如下图.为了节省经费以及方便计划旅程,小哼希望在出发之前知道任意两个城市之前的最短路程. 上图中有4个城市8条公路,公路上的数字表 ...
- Floyd-傻子也能看懂的弗洛伊德算法(转)
暑假,小哼准备去一些城市旅游.有些城市之间有公路,有些城市之间则没有,如下图.为了节省经费以及方便计划旅程,小哼希望在出发之前知道任意两个城市之前的最短路程. 上图中有4个城市8条公路,公路上的数字表 ...
- 最短路径算法 Floyd-傻子也能看懂的弗洛伊德算法(转)
讲的清楚的1 https://www.cnblogs.com/wangyuliang/p/9216365.html 讲的清楚的2 ahttps://zhuanlan.zhihu.com/p/13911 ...
- 人人都能看懂的EM算法推导
作者丨August@知乎(已授权) 来源丨https://zhuanlan.zhihu.com/p/36331115 编辑丨极市平台 估计有很多入门机器学习的同学在看到EM算法的时候会有种种疑惑:EM ...
- em算法 实例 正态分布_人人都能看懂的EM算法推导
↑ 点击蓝字 关注极市平台作者丨August@知乎(已授权)来源丨https://zhuanlan.zhihu.com/p/36331115编辑丨极市平台 极市导读 EM算法到底是什么,公式推导怎么去 ...
- 争取能让大家都能看懂的 DFA 算法
为什么要学习这个算法 我们公司一直都有的一个敏感词检测服务,前一段时间遇到了瓶颈,因为词库太多了导致会有一些速度过慢,而且一个正则表达式已经放不下了,需要进行拆分正则才可以. 正好我以前看过有关 df ...
- 我这种傻子都能看懂的 java oi流
此文章较为适合我这种初学者 废话不多说直接进入正题 观看如下代码 public class 铜中 {public static void main(String []args) {File yf=ne ...
- 傻子也能看懂的迪杰斯特拉算法(转)
本周来来介绍指定一个点(源点)到其余各个顶点的最短路径,也叫做"单源最短路径".例如求下图中的1号顶点到2.3.4.5.6号顶点的最短路径. 与Floyd-Wa ...
- 傻子都能看懂的马拉车Manacher
Manacher's Algorithm 马拉车算法操作及原理 package advanced_001;public class Code_Manacher {public static char[ ...
- 匈牙利算法——你一定可以看懂的图论算法
第一次讲解一个算法,也是最近才学到的一个算法,我的语言表达能力可能不是很强,排版也不是特别好,但是真的有认真在做一篇文章,如果有好的意见可以告诉我,非常感谢. 匈牙利算法是一种在多项式时间内求解任务分 ...
最新文章
- linux下使用extundelete恢复ext3/ext4分区数据
- C/C++位域结构深入解析
- React中props与state的区别
- MySQL数据存储目录查找
- 激战服务器位置,如何选服务器 《激战2》服务器设置讲解
- .net框架读书笔记---CLR内存管理\垃圾收集(二)
- 信息学奥赛一本通C++语言——1128:图像模糊处理
- mysql age字段类型_mysql 列类型
- sencha touch Container控件 setRecord 与 setData的区别
- BZOJ - 2819 Nim
- LibCef中的一些坑
- 卧槽,物色了一款隐秘拍摄神器,别乱用!
- 地图比例尺的计算(转)
- SpringBoot系列之Spring Data MongoDB教程
- 雷电2接口_厉害!跟Type-C长得一毛一样的雷电3,原来区别这么大,别搞混了
- Python xlwings Excel单元格部分内容添加下划线
- 苹果手机点击事件无效
- 记忆力很差怎么学计算机,九个方法增强记忆力 学生记忆力很差怎么办
- Android实现收款成功金额的语音播报功能(Nice tone)
- 大脑,字节,背部,Bun头-程序员的优先事项