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

最短路反向建边

题目问题:

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

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


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

首先,我们先来看一个正常的有向图最短路-反向建边(附图详解)_第1张图片

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

下面张图表示的是5终点14终点1的最短距离路线
最短路-反向建边(附图详解)_第2张图片

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

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

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

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

来来来,我们看一下把箭头反向的图
最短路-反向建边(附图详解)_第3张图片

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

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

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

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

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

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

你可能感兴趣的:(算法之路,图论,算法,dijkstra)