Floyd算法

最短路径两个最基础的算法之一,用于求多源最短路径。
其实就是三个循环套在里面,但是很难理解。

for(int k=1;k<=n;k++)
 for(int i=1;i<=n;i++)
  for(int j=1;j<=n;j++)
   if(mp[i][j]>mp[i][k]+mp[k][j])
    mp[i][j]=mp[i][k]+mp[k][j];

看成两个循环就好了,最外面的循环控制每次路径缩小的点,即若是i,j之间存在一点x,且路径短,则i,j路径等于较短路径。
内部两个循环就是单纯搜寻i,j。

例如 存在1-----4和1-2-3-4两个路径
第一次搜寻1,不存在
第二次搜寻2,有1 3,那么如果路径相比之下较短就简化为1 3 ,也就是说现在新建了1 3这条路径
第三次搜寻3 有 就有了2 4 和 1 4,所以就出来了1—4的最短路径
每次都把k值有关的点给最短化路径,那么整个n执行完之后,整个图里都是最短路径。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值