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

本文详细介绍了一个具有动态规划特点的Floyd算法,该算法用于寻找图中所有顶点对之间的最短路径。通过两个数组记录顶点间的最短距离及中间节点,并通过迭代更新这些值来确保正确性。

这个算法结构很是简单,但是理解还是有一定的困难,一开始做的时候想不明白,跟着算法自己动手画画就知道这个算法具体是怎么回事了。

时间复杂度是O(N*3)

算法有点动态规划的意思,有两个数组,一个(dis[])是记录俩顶点之间的最短路径的长度的,一个[path]数组是记录俩结点的中间结点的。在初始化这个数组的默认为 顶点的下标。。 

最重要的就是下面的几步

if(dis[sta][end]>dis[sta][temp]+dis[temp][end]){

dis[sta][end] = dis[sta][temp]+dis[temp][end];

}

上面的代码就是这个算法的精华部分。

sta:开始的顶点,end:结束的顶点,temp:是sta和end上的中间结点

两者相比较,要是有更短的路径就跟新俩结点的距离。

以每一个结点为中间点,更新数组,也就是所有顶点的距离。

话不多说。上程序。。。。


img_eca6e9f181245c8a05d667b550deca3b.png



img_bcc5a1c80b5e526dee289576fd503e8a.png
img_765a3266d60b4c1e16c6d9b2c1be651f.png
img_c35d76646cc8fb575438026021ddb17b.png
img_301e90f6b96932fd58839dd2871fa4c1.png

OK

就这个多,之前的都是铺垫,注意看重点的部分,floyd算法部分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值