【发布时间】:2012-07-22 09:51:47
【问题描述】:
我正面临着我认为是图上的一种最短路径问题。
我需要找到从节点 A 到 B 的最短路径,考虑到所有边对于连接的顶点具有正权重,对于未连接的顶点具有 ∞。
顶点具有可变的正权重。
路径的成本是考虑到该路径中涉及的所有顶点,具有最大权重的顶点的权重。
我应该在这种情况下应用 Dijkstra,如果可以,考虑到每个 Vertex 的权重会根据之前访问的顶点而变化,应该如何应用?
你能告诉我如何解决这个问题吗?
【问题讨论】:
-
Dijkstra 不断发现新路径并更新节点权重,如果在制作树时大于之前的权重,Dijkstra 是这样做的好方法。你可能也想看看 A* :)
-
"我应该在这种情况下应用 Dijkstra,如果可以,考虑到每个顶点的权重会根据之前访问的顶点而变化,应该如何应用?" -> 是的,每个顶点的权重可能会改变。这不是问题,解决您粘贴的问题的算法:)
-
好的,所以基本上我会尝试使用我的函数 max(weight(path_vertexes)) 在每一步对每个顶点的暂定距离应用 Dijkstra 计算,而不是简单地将边和顶点权重添加到当前路径成本就像问题的基本版本一样。
-
算法如下:en.wikipedia.org/wiki/Dijkstra%27s_algorithm。您在 dijkstra 中称其为您放松的最大功能 :)
-
@AndreaCasaccia 好的。我现在明白了这个问题。正如 Anubis 所提到的,Dijkstra 的单源最短路径算法将起作用。对于经典的 SP 问题,Dijkstra 算法不适用于负边权重。但是对于这个问题,即使顶点具有 -ve 权重,它仍然可以工作,因为距离函数只是一个顶点对路径中涉及的所有顶点的最大权重。
标签: graph graph-algorithm