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++实现相关推荐

  1. 数据结构与算法(7-4)最短路径(迪杰斯特拉(Dijkstra)算法、弗洛伊德(Floyd)算法)

    目录 一.最短路径概念 二.迪杰斯特拉(Dijkstra)算法(单源最短路径) 1.原理 2.过程 3.代码 三.弗洛伊德(Floyd)算法(多源最短路径) 1.原理 2.存储 3.遍历 4.代码 参 ...

  2. 【POJ/算法】 3259 Wormholes(Bellman-Ford算法, SPFA ,FLoyd算法)

    Bellman-Ford算法 Bellman-Ford算法的优点是可以发现负圈,缺点是时间复杂度比Dijkstra算法高.而SPFA算法是使用队列优化的Bellman-Ford版本,其在时间复杂度和编 ...

  3. 最小环算法求解(Dijkstra算法+Floyd算法)

    方法一: #include<iostream> #include<algorithm> #include<cmath> #include<cstdio> ...

  4. HDU2544(Bellman-ford算法和Floyd算法)

    思路: 1.初始化时将起点 s 到各个顶点 v 的距离 dist(s->v) 赋值为 ∞,dist(s->s) 赋值为 0: 2.后续进⾏最多 n-1 次遍历操作 (n 为顶点个数), 对 ...

  5. 【图论专题】Floyd算法及其扩展应用

    Floyd的拓展应用: 任意两点最短路 传递闭包 找最小环 恰好经过k条边的最短路(倍增) 题目列表: 题目 算法 AcWing 1125. 牛的旅行 任意两点最短路Floyd AcWing 343. ...

  6. 【图论】用一道题从本质上讲清楚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 ...

  7. 图的单源最短路径,Floyd算法(数据结构c++)

    这个算法结构很是简单,但是理解还是有一定的困难,一开始做的时候想不明白,跟着算法自己动手画画就知道这个算法具体是怎么回事了. 时间复杂度是O(N*3) 算法有点动态规划的意思,有两个数组,一个(dis ...

  8. floyd算法_最短路径的算法:Floyd算法

    点击箭头处"蓝色字",关注我们哦!! 算法 最短路径的算法-Floyd算法 ● ○ ● Shortest Path Algorithm - Floyd Algorithm ● ○ ...

  9. 最短路径—Dijkstra算法和Floyd算法

    Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Di ...

  10. 最短路径-Dijkstra算法与Floyd算法

    最短路径-Dijkstra算法与Floyd算法 原文:https://www.cnblogs.com/smile233/p/8303673.html 一.最短路径 ①在非网图中,最短路径是指两顶点之间 ...

最新文章

  1. 简单的一阶低通滤波器
  2. 大数据读书笔记(2)-流式计算
  3. SDN的发展壮大确实在蚕食物理网络基础设施的阵地
  4. 蒙特 卡罗方法matlab,蒙特·卡罗方法中的数学之美,你一定不想错过
  5. 软件生存周期文档系列 之 6.用户操作手册
  6. (计算机组成原理)第二章数据的表示和运算-第二节2:原码、反码、补码和移码的作用
  7. mac 强制退出程序_教你强制退出程序!
  8. python 设计模式之装饰器模式 Decorator Pattern
  9. opacity 设置不透明度、visibility 设置是否可见、transition 设置过渡动画
  10. 社交礼仪与口才艺术 艾跃进
  11. GlobalMapper 脚本应用(持续更新)
  12. QListView的使用
  13. 手把手 VM虚拟机安装deepin系统
  14. 可靠性测试项目之可靠性试验
  15. 大众点评各城市热门餐厅评分字体加密信息数据采集
  16. 中国遥感数据查询网址
  17. kubeadm更改配置
  18. 旅游类的APP原型模板分享——Priceline
  19. 个别化教育计划IEP模板
  20. 保险业首季度保费收入猛增五成

热门文章

  1. java mybatis 事务,单独的使用mybatis 如何来管理事务
  2. 学完Linux之后学什么语言,学习C语言一段时间后我们能做什么?
  3. usb环境Linux,Linux环境下USB的原理、驱动和配置
  4. x86汇编之任务切换
  5. DoTween插件使用
  6. 先序、中序和后序数组两两结合重构二叉树 -- 图解
  7. nginx访问502,日志报错:connect() to 127.0.0.1:180 failed (13: Permission denied)解决
  8. android 默认shell busybox,采用busybox 代替android 自带的shell
  9. 小度智能音箱维修点_进击的小钢炮!体验小度智能音箱大金刚
  10. matlab 方差_统计学原理与matlab——(3)几何分布与超几何分布