最短路-反向建边(附图详解)

最短路反向建边

题目问题:

通过对最短路的学习,我们很容易地学会了如何求一个起点任一终点的最短距离,但如果我们要求多个起点一个终点的最短距离给怎么求呢?

PS : 当然,我们这里讨论都是有向图,因为无向图起点到终点的最短距离就等于终点到起点的最短距离
还有就是这里讨论的都是点比较多的情况(点少当然就用Floyd啦)


其实想要解决这个问题我们反向建边就行了吖.

首先,我们先来看一个正常的有向图描述

这时我们假设我们的终点是1,我们要求其他点终点1的最短距离

下面张图表示的是5终点14终点1的最短距离路线
在这里插入图片描述

通过上图我们可以看出要从不同起点终点1,我们只需要分别找出正向箭头的最短路就可以啦

那么试想一下,如果我们令终点1沿着起点来的路倒着走回去会怎么样呢?

讲道理,其实就是让终点1沿着指向自己的箭头向起点走来就最短距离就是起点终点1的最短距离

(即反向走,反着走,逆着箭头走)
终点1开始走的话,也就是说我们正向的箭头都不能走,只能走逆向的箭头

来来来,我们看一下把箭头反向的图
在这里插入图片描述

也就是说我们只需要把图的箭头反向(正向变逆向,逆向变正向)

反向的方法就是反向建边了呀

比如:
矩阵: g[to][from]=cost----->>g[to][from]=cost
邻接表也是类似的方法

然后再用我们熟悉的最短路算法解就行啦,我们解出来的就是不同起点一个终点的最短距离啦

好啦,本蒟蒻解释完了,学废 学会了就可以去这个链接[请点击]练练手.

觉得对你有帮助的话,就请点个赞吧!

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值