【问题标题】: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 等其他算法更好?

【问题讨论】:

    标签: algorithm graph shortest-path


    【解决方案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 或任何其他值),可能的路径组合就会更多。
    猜你喜欢
    • 1970-01-01
    • 2012-05-14
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 2022-01-19
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多