java - 扭曲的最短路径

标签 java algorithm graph-algorithm shortest-path dijkstra

我有 n 个顶点和它们之间的 m 个无向加权边(权重代表分钟)。每个顶点包含在该顶点上喝咖啡所需的分钟数。

我想确定从顶点 v 到顶点 w 所需的最短时间(分钟),但有额外的限制,我必须喝咖啡在我从 vw 的过程中的一个顶点上。

示例:

(顶点的数字是喝一杯咖啡所需的分钟数,边上的权重代表通过这条边所需的分钟数)

vw 并在途中喝咖啡,输出最小的必要时间(输出应为 30)。

enter image description here

我目前的方法是用 Dijkstra 找到最短路径(求和该路径上所有边的权重),然后将该路径上咖啡时间最短的顶点的值添加到我的结果是为了获得从 vw 所需的总时间。

我的方法不行,下面是我的方法失败的例子(我的方法结果是12分钟,实际结果应该是6分钟):

Counterexample for my approach

如何确定从顶点 vw 的最短时间量以及我需要在我的路径上喝咖啡的约束?

最佳答案

解决这个问题的标准方法是:

  1. 为您的图表制作 2 个副本 -- need_coffee 版本和 had_coffee 版本

  2. 将每个 need_coffee 节点与相应的 had_coffee 节点连接起来,边成本等于在该节点喝咖啡的成本。

  3. 使用 Dijkstra 算法找到从 V_need_coffeeW_had_coffee

    的最短路径

关于java - 扭曲的最短路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44133138/

相关文章:

java - 使用 Spring 测试 lambda express 出现异常

algorithm - 协同过滤可以用来推荐事件吗?

c++ - 用 C++ 求解模方程组

c# - 维护和刷新二维绘图中的连接

c++ - Dijkstra 算法伪代码

algorithm - 从一组数字中计算目标数字

java - 由于 SWIG 似乎无法与托管 C++/CLI 一起使用,我还能使用什么(与 Java 通信)?

java - 是否可以在 selenium 测试中访问 java bean?

java - 从 URL 加载图像时的性能问题

java - 如何在 Trie 数据结构中实现 remove 方法?