我有一个图表,我需要找到从多个来源到单个目的地的距离。我知道如何使用dijkstra算法找到单一来源到多目的地。
我在这里找到了一个接受的答案:Algorithm like Bellman-Ford, only for multiple start, single destination?
但我不明白为什么它会起作用。任何人都能解释为什么这个答案有效吗?
答案 0 :(得分:6)
它有效,因为如果你有一个(原始)来源s
和你的目标t
- 在修改过的图表中,你会反转边缘并找到从t
到s
的最短路径所有节点,包括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);
}
}
作为源运行最短路径算法。
(假设你需要的是从某个源到目标的最短路径)