编程语言
首页 > 编程语言> > java – 扭曲的最短路径

java – 扭曲的最短路径

作者:互联网

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

我想确定从顶点v到顶点w所需的最短时间(分钟),但是附加约束我必须在从v到w的路上的一个顶点上喝咖啡.

例:

(顶点中的数字是喝咖啡所需的分钟数,边缘上的重量表示行进此边缘所需的分钟数)

从v到w并在途中喝咖啡,输出最小的必要时间(输出应为30).

enter image description here

我目前的方法是找到Dijkstra的最短路径(总结该路径上所有边的权重),然后将该路径上具有最低咖啡时间的顶点值添加到我的结果中,以获得总量从v到w的必要时间.

我的方法不起作用,这是一个我的方法失败的例子(我的方法的结果是12分钟,实际结果应该是6分钟):

Counterexample for my approach

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

解决方法:

解决此问题的标准方法是:

>制作2份图表 – need_coffee版本和had_coffee版本.
>将每个need_coffee节点与相应的had_coffee节点连接,边缘成本等于在该节点喝咖啡的成本.
>使用Dijkstra的算法找到从V_need_coffee到W_had_coffee的最短路径

标签:java,algorithm,graph-algorithm,shortest-path,dijkstra
来源: https://codeday.me/bug/20190722/1501343.html