最短路反向建边
题目问题:
通过对最短路的学习,我们很容易地学会了如何求一个起点到任一终点的最短距离,但如果我们要求多个起点到一个终点的最短距离给怎么求呢?
PS : 当然,我们这里讨论都是有向图,因为无向图起点到终点的最短距离就等于终点到起点的最短距离
还有就是这里讨论的都是点比较多的情况(点少当然就用Floyd啦)
其实想要解决这个问题我们反向建边就行了吖.
首先,我们先来看一个正常的有向图
这时我们假设我们的终点是1,我们要求其他点到终点1的最短距离
下面张图表示的是5到终点1和4到终点1的最短距离路线
通过上图我们可以看出要从不同起点到终点1,我们只需要分别找出正向箭头的最短路就可以啦
那么试想一下,如果我们令终点1沿着起点来的路倒着走回去会怎么样呢?
讲道理,其实就是让终点1沿着指向自己的箭头向起点走来就最短距离就是起点到终点1的最短距离
(即反向走,反着走,逆着箭头走)
从终点1开始走的话,也就是说我们正向的箭头都不能走,只能走逆向的箭头
来来来,我们看一下把箭头反向的图
也就是说我们只需要把图的箭头反向(正向变逆向,逆向变正向)
反向的方法就是反向建边了呀
比如:
矩阵: g[to][from]=cost----->>g[to][from]=cost
邻接表也是类似的方法
然后再用我们熟悉的最短路算法解就行啦,我们解出来的就是不同起点到一个终点的最短距离啦
好啦,本蒟蒻解释完了,学废 学会了就可以去这个链接[请点击]练练手.
觉得对你有帮助的话,就请点个赞吧!