繁体   English   中英

如何使用 Dijkstra 算法在地铁中找到具有换乘时间的最短路径

[英]How to find Shortest Path in subway with transfer time using Dijkstra's Algorithm

我面临一个小技巧的问题。 我需要帮助!

问题是在地铁中找到从起点到目的地的最短路径。 地铁数据提供了每个节点与其线路之间的时间。 每次换乘(换线)需要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(计算)节点 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。

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

谢谢

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM