多源单目标算法

时间:2015-06-14 17:19:03

标签: algorithm dijkstra

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

我在这里找到了一个接受的答案:Algorithm like Bellman-Ford, only for multiple start, single destination?

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

1 个答案:

答案 0 :(得分:6)

它有效,因为如果你有一个(原始)来源s和你的目标t - 在修改过的图表中,你会反转边缘并找到从ts的最短路径所有节点,包括t->v1->v2->...->vk->s

此路径为(v,u)

当且仅当原始图s->vk->vk-1->...->v2->v1->t 中存在边时,此路径中的每条边(u,v)都存在,因此反转图中的上述路径可以直接转换为路径:

x

路径的权重是相同的,没有更短的路径,否则 - 你会在反转图上找到它。

作为旁注,我个人更喜欢通过创建一个新的虚拟节点x将多个源问题转换为单一来源问题,并创建一个从x到任何权重为0的源的边,然后使用function one() { alert("first"); } function two() { alert("second"); } window.onresize = function() { var test = document.getElementById("div"); if (window.innerWidth > 500) { try{ test.removeEventListener("click",two); } catch{} test.addEventListener("click",one,false); } else { try{ test.removeEventListener("click",one); } catch{} test.addEventListener("click",two,false); } } 作为源运行最短路径算法。
(假设你需要的是从某个源到目标的最短路径)