[英]How to implement Dijkstra's Algorithm to find the shortest path in Java
[英]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 工作得很好,只需稍微修改边权重,当从节点u
到v
和line[u] != line[v]
有一条边时,我们只需将边长增加5 (transfer time)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.