首页 > 编程语言 >只有五行的算法----Floyd-Warshall

只有五行的算法----Floyd-Warshall

时间:2023-02-17 15:04:45浏览次数:30  
标签:Warshall MAX t2 t3 t1 ---- int Floyd 顶点


只有五行的算法----Floyd-Warshall_最短路径

上图为一个城市地图,图中有4个城市,8条公路 ,公路上的数字表示这条公路的长短,并且这些公路是单向的,我们现在要求出任意两个城市之间的最短路径,也就是求任意两点的最短路径。

我们用一个数据结构来存储图的信息,我们仍然可以用一个4*4的矩阵来存储,比如 1 号城市 到 2 号城市的路程为 2 ,a[1][2] = 2 ,无法到达用无穷的 来表示 ,并且我们约定自己到自己的城市的路程为0 。

只有五行的算法----Floyd-Warshall_最_02

当当当当,上面就是初始化好的图结构, 好 ,现在回到问题,我们应该怎样求任意两点之间的最短距离呢,当然我们可以用深搜,广搜求出。可是还有没有其他办法呢。

当然有了,根据以往的经验,如果让任意两个点之间的距离变短,只能引入第三个点(顶点 k),并通过这个顶点k'作为中转才能达到缩短顶点a到达顶点b的目的。

代码如下:

#include <iostream>
#include <cstdio>
using namespace std ;
const int MAX = 1000 ;
const int INF = 0x3f3f3f3f ;
// 只有五行的Floyd - Warshall 算法 -- 最短路径 ;
int a[MAX][MAX];
int n , m ;

int main()
{
int i , j ,k;
/* 用一个 n*n的 二维数组来存储图 */
cin>>n>>m ;
for ( i= 1 ;i<=n ;i++)
{
for(j = 1 ;j<=n ;j++)
{
if(i==j)
a[i][j] = 0 ;
else
a[i][j] = INF ;
}

}
// 核心算法
for(i=1;i<=m;i++)
{
int t1,t2,t3 ;
cin>>t1>>t2 >>t3;
a[t1][t2] = t3 ;

}
for(k=1;k<=n;k++)
{
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(a[i][j]>a[i][k]+a[k][j] )
a[i][j] = a[i][k]+a[k][j];
}
}


}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
printf("%5d",a[i][j]);
}

printf("\n");
}


return 0 ;
}




标签:Warshall,MAX,t2,t3,t1,----,int,Floyd,顶点
From: https://blog.51cto.com/u_15970235/6064106

相关文章

  • 数据结构--顺序线性表
    #include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>usingnamespacestd;#defineOK1#defineERROR-1#defineLIST_INIT_SIZE100#defineLISTSIZ......
  • 数据结构--基本概念及术语
    1. 数据:是对客观事物的符号表示,在我们计算机科学中是指所有能输入到计算机中,并能够被计算机程序处理的符号总称。他是计算机程序加工的“原料”。比如说,一个利用数值分......
  • 数据结构--线性表
    线性表最简单也是最常用的一种数据结构,它的特点是,在数据元素的非空有限集中,(1)存在唯一一个被称为“第一个”的数据元素,存在唯一一个被称为“最后一个”的数据元素。(2)除了第......
  • 《DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南》第十三章 QSPI Flash读写测试实验​
    QSPIFlash读写测试实验​PS的输入/输出外设(IOP)有两个具有不同功能特性和IO接口性能的QSPI控制器。它们共享相同的APB从接口和MIO引脚。一次只能使用控制器中的一个。QSPI......
  • 负载均衡意思
    什么事负载均衡?将用户请求或者说流量通过负载均衡器,按照某种负载均衡算法把流量均匀地分散到后端的多个服务器上,接收到请求的服务器可以独立的响应请求,以期望的规则分摊到多......
  • 我的两群吃粽小伙子
    3270:我的两群吃粽小伙伴TimeLimit:1Sec  MemoryLimit:128MBSubmit:683  Solved:26[​​Submit​​][​​Status​​][​​WebBoard​​]Description......
  • C++继承--公有继承
    C++继承--公有继承#include<iostream>#include<cstdio>usingnamespacestd;classStudent{//基类public:voidget_value();voiddisplay();private:intnu......
  • 校园运动会报名系统
     大一课程设计: (运行环境DEVc++) 链接:https://pan.baidu.com/s/15ZBh826b2W3CJl5-bnzQAg 提取码:znka 解压到工程下,就可用,运行main.cpp(ps:需要修改一下里面......
  • STL 概述
    STL提供三种类型的组件:容器,迭代和算法,他们都支持泛型程序设计标准.容器有两类:顺序容器和关联容器.顺序容器(vector,list,deque,stringetc..)它是一......
  • 传递任意数量的实参
    一丶有时候,你预先不知道函数需要接受几个实参,好在python允许从调用语句中收集任意数量的实参,例如,来看一个制作披萨的函数,他需要接受很多配料,但你无法预先确......