图最短路径?

Posted

技术标签:

【中文标题】图最短路径?【英文标题】:Graph shortest path? 【发布时间】: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 权重,它仍然可以工作,因为距离函数只是一个顶点对路径中涉及的所有顶点的最大权重。 【参考方案1】:

我不明白您是否应该考虑边的权重,因为您说您希望在可能的顶点上具有最大/最小权重的路径,从 A 到 B。 我的解决方案是将顶点上的每个权重转换为边缘上的权重,就像在图像中一样:

现在你想找到从 A 到 B 的路径,其中边上的最大权重是 min/max。 您可以为此使用 MST algotirhm,因为您不关心路径长度,而只关心最大/最小边缘成本。

【讨论】:

以上是关于图最短路径?的主要内容,如果未能解决你的问题,请参考以下文章

图最短路径?

无向图最短路径算法

数据结构&算法-图最短路径

数据结构&算法-图最短路径

搜索带权图最短路径的Dijkstra算法

教你一招 | Python实现无向图最短路径