Floyd算法为什么能找到最短路径

Floyd算法仅仅5行代码找到最短路径令人惊讶,这篇博客讲的很好,直击要害。下面我再整理一下思路,说说我对文中那个“致命的结论”的理解。

假设图中有N个节点,编号为1, 2, ..., N。

  • 循环开始前,某些节点对之间的最短路径已经确定,就是一跳直连。
  • 循环开始,考虑以节点1为中间节点,即k=1。假设i到j之间的最短路径上,编号最大的是1(除了i和j),那么也一定只有一个1了,而且i到1以及1到j的最短路径一定也已经确定,就是上一步中那些直连的。因此,d[i][j]也就更新为最短的了。
  • k=2。假设i到j(另一对i和j)之间的最短路径上,编号最大的是2(除了i和j),那么这条路上也可能还有一个1。i到2之间最短路径上编号最大的一定小于2,2到j之间最短路径上编号最大的也一定小于2,而这些子路径在前两步已经确定,因此,d[i][j]可以更新为最短。
  • k=3,同理。

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值