图上权重变化的最短路径

Posted

技术标签:

【中文标题】图上权重变化的最短路径【英文标题】:Shortest path on graph with changing weights 【发布时间】:2017-07-06 04:55:13 【问题描述】:

我试图解决一个本地编程竞赛问题。问题基本上是关于在加权图中找到最短路径。我对这些类型的问题很陌生,我认为我可以使用 Dijkstra 的算法。但是,有一个小问题 - 某些值会有所不同,具体取决于当前路径的情况。

问题

有两种类型的权重:普通权重和有条件的权重(我们称它们为 K)。条件是这样的:一旦你通过权重为 K 的边,所有其他类型为 K 的权重的值为 0。这带来了更多问题,因为明显的最短路径可以被权重为 K 的边的组合击败.

示例

以下是此类问题。如果没有权重会改变它们的值,我们可以使用 Dijkstra 轻松找到最短路径。但是,当权重 K 改变它们的值时,我们可以找到一条更短的路径,因为在经过边 A-C 之后,边 C-D 的权重为 0。

问题

如何找到最短路径?

我可以在这里使用 Dijkstra 的算法还是使用 A* 或 BFS 等其他算法更好?

【问题讨论】:

【参考方案1】:

有多少个K?

我只有一个,Dijkstra 很好。 我要补充一点,BFS 不能很好地处理重量。

提醒:Dijkstra 找到从一个顶点到所有顶点的最短路径。

运行 Dijkstra 两次并为每次运行定义不同的 wight 函数。首先,K 值的 wight 函数是无限的。 K 值的第二个 wight 函数为 0。

比从run1到run2+K的结果比较。

这是真的,因为如果最短路径没有 K,第一次运行会找到它。否则它与 K 一起运行,第二次运行会找到它。无论哪种方式,算法都会找到它。

【讨论】:

谢谢!这正是我一直在寻找的。 K 边数在 0 和边数之间的范围内,但无论图中有多少 K 边,您的解决方案似乎都有效。 这不是我所说的有多少K。想象一下,您也有 M 值……或 Z 值。因此,对于每个不同的值,您将不得不做更多的工作。 K边的数量无关紧要 哦,好的,我现在明白了。因此,对于更多特殊值(K、M 或任何其他值),可能的路径组合就会更多。

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

Dijkstra 的最短路径算法不返回权重最小的最短路径

将边权重加倍后的最短路径

图-最短路径-Dijkstra及其变种

图 - 具有顶点权重的最短路径

数据结构8——最短路径

算法珠玑单源最短路径问题