我正面临着一个小技巧的问题。我需要帮助!
问题是在地铁中找到从起点到目的地的最短路径。地铁数据提供了每个节点与其线路之间所用的时间。每次换乘(换线)都需要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分钟。然而,实际的最短路径是6分钟的A->B->C->E,因为它不需要传输时间!
也就是说,在集合S中取E之后,Dijkstra的路径A->D->C应该修改为A->B->C。
然而,我不知道如何在编程代码中实现这个想法。我使用的是JAVA。
请帮助任何人!给我点子!!
谢谢
发布于 2020-06-15 15:24:28
Dijkstra运行得很好,只需要稍微修改一下边权重,当有一条边从节点u
到v
和line[u] != line[v]
时,我们只需要将边的长度增加5 (transfer time)
https://stackoverflow.com/questions/62382732
复制相似问题