Floyd算法 C++实现
Floyd算法
核心代码:
1 for (k = 0 ;k<n;;k++) 2 for(i=0;i<n;i++) 3 for(j=0;j<n;j++) 4 if(a[i][k]+a[k][j]<a[i][j]) 5 { 6 a[i][j]=a[i][k]+a[k][j]; 7 path[i][j]=path[k][j];//缩短路径长度,绕过k到j 8 } 9 //a[i][j]是顶点i和j之间的最短路径长度,path[i][j]是相应路径上顶点j的前 10 //一顶点的顶点号
三重for循环判断,加入一个中间k点,扫描,找到最短路径。时间复杂度O(n^3),主要增加了中间顶点,尝试判断是否小于原来的路径长,如果小于,则以此新路径代替原路径,修改矩阵元素。
简单案例:
在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗?
输入包括多组数据。每组数据第一行是两个整数N、M(N<=100,M<=10000),N表示成都的大街上有几个路口,标号为1的路口是商店所在地,标号为N的路口是赛场所在地,M则表示在成都有几条路。N=M=0表示输入结束。接下来M行,每行包括3个整数A,B,C(1<=A,B<=N,1<=C<=1000),表示在路口A与路口B之间有一条路,我们的工作人员需要C分钟的时间走过这条路。 输入保证至少存在1条商店到赛场的路线。对于每组输入,输出一行,表示工作人员从商店走到赛场的最短时间
Sample Input
2 1
1 2 3
3 3
1 2 5
2 3 5
3 1 2
0 0
Sample Output
3 2
#include<iostream>#define maxn 0x3f3f3f3fusing namespace std;int lowcost[1000][1000],i,j,k,n;//全局变量中,变量已全部初始化 void floyd(){for(k=1;k<=n;k++)for(i=1;i<=n;i++)for(j=1;j<=n;j++)if(lowcost[i][k]+lowcost[k][j]<lowcost[i][j])lowcost[i][j]=lowcost[i][k]+lowcost[k][j];} int main() {int m,c,a,b;while(cin>>n>>m)//n代表街口数,m代表路数,c代表从a到b之间的分钟数 {if(n==m&&n==0)break;for(i=1;i<=n;i++)for(j=1;j<=n;j++){ if(i==j)lowcost[i][j]=0;//即斜线置0,由a到a权值为0 else lowcost[i][j]=maxn;//将数组中的权值置无穷大 }for(i=1;i<=m;i++){cin>>a>>b>>c;//输入路径(即数组下标)a、b及c权值 lowcost[a][b]=lowcost[b][a]=c;//将存储路径下标为a、b的数组中置权值为c }floyd();//调用floyd算法得到最短路径 cout<<lowcost[1][n]<<endl;}return 0; }
转载于:https://www.cnblogs.com/javabai/p/10988695.html
Floyd算法 C++实现相关推荐
- 数据结构与算法(7-4)最短路径(迪杰斯特拉(Dijkstra)算法、弗洛伊德(Floyd)算法)
目录 一.最短路径概念 二.迪杰斯特拉(Dijkstra)算法(单源最短路径) 1.原理 2.过程 3.代码 三.弗洛伊德(Floyd)算法(多源最短路径) 1.原理 2.存储 3.遍历 4.代码 参 ...
- 【POJ/算法】 3259 Wormholes(Bellman-Ford算法, SPFA ,FLoyd算法)
Bellman-Ford算法 Bellman-Ford算法的优点是可以发现负圈,缺点是时间复杂度比Dijkstra算法高.而SPFA算法是使用队列优化的Bellman-Ford版本,其在时间复杂度和编 ...
- 最小环算法求解(Dijkstra算法+Floyd算法)
方法一: #include<iostream> #include<algorithm> #include<cmath> #include<cstdio> ...
- HDU2544(Bellman-ford算法和Floyd算法)
思路: 1.初始化时将起点 s 到各个顶点 v 的距离 dist(s->v) 赋值为 ∞,dist(s->s) 赋值为 0: 2.后续进⾏最多 n-1 次遍历操作 (n 为顶点个数), 对 ...
- 【图论专题】Floyd算法及其扩展应用
Floyd的拓展应用: 任意两点最短路 传递闭包 找最小环 恰好经过k条边的最短路(倍增) 题目列表: 题目 算法 AcWing 1125. 牛的旅行 任意两点最短路Floyd AcWing 343. ...
- 【图论】用一道题从本质上讲清楚Floyd算法
P1119 [灾后重建] 4 5 1 2 3 4 0 2 1 2 3 1 3 1 2 2 1 4 0 3 5 4 2 0 2 0 1 2 0 1 3 0 1 4 -1 -1 5 4 一道非常好的Flo ...
- 图的单源最短路径,Floyd算法(数据结构c++)
这个算法结构很是简单,但是理解还是有一定的困难,一开始做的时候想不明白,跟着算法自己动手画画就知道这个算法具体是怎么回事了. 时间复杂度是O(N*3) 算法有点动态规划的意思,有两个数组,一个(dis ...
- floyd算法_最短路径的算法:Floyd算法
点击箭头处"蓝色字",关注我们哦!! 算法 最短路径的算法-Floyd算法 ● ○ ● Shortest Path Algorithm - Floyd Algorithm ● ○ ...
- 最短路径—Dijkstra算法和Floyd算法
Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Di ...
- 最短路径-Dijkstra算法与Floyd算法
最短路径-Dijkstra算法与Floyd算法 原文:https://www.cnblogs.com/smile233/p/8303673.html 一.最短路径 ①在非网图中,最短路径是指两顶点之间 ...
最新文章
- 简单的一阶低通滤波器
- 大数据读书笔记(2)-流式计算
- SDN的发展壮大确实在蚕食物理网络基础设施的阵地
- 蒙特 卡罗方法matlab,蒙特·卡罗方法中的数学之美,你一定不想错过
- 软件生存周期文档系列 之 6.用户操作手册
- (计算机组成原理)第二章数据的表示和运算-第二节2:原码、反码、补码和移码的作用
- mac 强制退出程序_教你强制退出程序!
- python 设计模式之装饰器模式 Decorator Pattern
- opacity 设置不透明度、visibility 设置是否可见、transition 设置过渡动画
- 社交礼仪与口才艺术 艾跃进
- GlobalMapper 脚本应用(持续更新)
- QListView的使用
- 手把手 VM虚拟机安装deepin系统
- 可靠性测试项目之可靠性试验
- 大众点评各城市热门餐厅评分字体加密信息数据采集
- 中国遥感数据查询网址
- kubeadm更改配置
- 旅游类的APP原型模板分享——Priceline
- 个别化教育计划IEP模板
- 保险业首季度保费收入猛增五成
热门文章
- java mybatis 事务,单独的使用mybatis 如何来管理事务
- 学完Linux之后学什么语言,学习C语言一段时间后我们能做什么?
- usb环境Linux,Linux环境下USB的原理、驱动和配置
- x86汇编之任务切换
- DoTween插件使用
- 先序、中序和后序数组两两结合重构二叉树 -- 图解
- nginx访问502,日志报错:connect() to 127.0.0.1:180 failed (13: Permission denied)解决
- android 默认shell busybox,采用busybox 代替android 自带的shell
- 小度智能音箱维修点_进击的小钢炮!体验小度智能音箱大金刚
- matlab 方差_统计学原理与matlab——(3)几何分布与超几何分布