Algorithm 多源单目的算法

Algorithm 多源单目的算法,algorithm,dijkstra,Algorithm,Dijkstra,我有一个图表,我需要找到从多个来源到单个目的地的距离。我知道如何使用dijkstra算法找到单个源到多个目的地 我在这里找到了一个公认的答案: 但我不明白为什么它会起作用。有人能解释为什么这个答案有效吗?之所以有效,是因为如果您有一个(原始)源s,并且您的目标t——在修改后的图中,您可以反转边并找到从t到所有节点的最短路径,包括到s 这个路径是t->v1->v2->…->vk->s 当且仅当原始图形(v,u)中存在边时,此路径中的每条边(u,v)才存在,因此反向图形中的上述路径可以直接转换为路径

我有一个图表,我需要找到从多个来源到单个目的地的距离。我知道如何使用dijkstra算法找到单个源到多个目的地

我在这里找到了一个公认的答案:


但我不明白为什么它会起作用。有人能解释为什么这个答案有效吗?

之所以有效,是因为如果您有一个(原始)源
s
,并且您的目标
t
——在修改后的图中,您可以反转边并找到从
t
到所有节点的最短路径,包括到
s

这个路径是
t->v1->v2->…->vk->s

当且仅当原始图形
(v,u)
中存在边时,此路径中的每条边(u,v)才存在,因此反向图形中的上述路径可以直接转换为路径:

s->vk->vk-1->...->v2->v1->t
路径的权重是相同的,并且没有更短的路径,否则-您会在反向图中找到它


作为旁注,我个人更喜欢通过创建一个新的虚拟节点
x
,将多个源问题转化为单个源问题,并创建一条从
x
到任何权重为0的源的边,然后以
x
作为源运行最短路径算法。

(假设您需要的是从某个来源到目标的最短路径)

谢谢您的回答,旁注将对我有很大帮助。