【问题标题】:How to find Shortest Path in subway with transfer time using Dijkstra's Algorithm如何使用 Dijkstra 算法在地铁中找到具有换乘时间的最短路径
【发布时间】:2020-06-15 15:24:27
【问题描述】:

我遇到了一个小技巧的问题。我需要帮助!

问题是在地铁中找到从起点到目的地的最短路径。 地铁数据提供了每个节点与其线路之间的时间。每次换乘(换线)需要5分钟。

我尝试使用 Dijkstra 算法编写此算法。 Dijkstra 和这个问题的主要区别在于这个问题有可能改变那些已经计算好的节点之间的最短路径(把它们放在集合 S 中)。

例如, 有A、B、C、D、E节点。我想找到从 A 到 E 的最短路径。

让我们说 A:1号线、2号线 B:1号线 C:1号线、2号线 D:第 2 行 E:第 1 行

A -> B: 2 minutes
B -> C: 2 minutes
A -> D: 1 minutes
D -> C: 2 minutes
C -> E: 2 minutes

在这种情况下,Dijkstra 算法将首先取入集合 S(calculated) 节点 A,然后是节点 D,然后是节点 B,然后是节点 C,然后是节点 E。

也就是说,Dijkstra 算法将 A -> D -> C -> E 显示为 10 分钟的最短路径,因为在节点 C,传输需要 5 分钟。 但是实际最短路径是 A->B->C->E 6 分钟,因为它不需要转机时间!

即在集合S中取E后,Dijkstra的路径A->D->C应修改为A->B->C。

但是,我不知道如何在编程代码中实现这个想法。 我正在使用 JAVA。

请帮助任何人!给我任何想法!

谢谢

【问题讨论】:

    标签: java algorithm


    【解决方案1】:

    Dijkstra 工作得很好,只需稍微修改边权重,当从节点 uvline[u] != line[v] 有边时,我们只需将边长度增加 5 (transfer time)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-26
      • 2016-07-30
      • 1970-01-01
      • 2011-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多