如何在Dijkstra算法中使用节点和边缘表示不同的公交路线?

时间:2013-10-01 14:27:53

标签: data-structures graph dijkstra shortest-path bus

在使用Dijkstra算法创建公交车旅行计划器时,常见的已知问题之一是计算中不考虑等待时间和行驶时间。通过在计算的权重上及时具有动态函数,可以获得最短路径。但是,我有一些问题,如何在边缘表中表示不同频率的不同总线号。例如,我有6个节点:A,B,C,D,E,F,有三条公交路线在从A到F的不同路径上行驶,当然它们有不同的频率。

我的数据结构:

巴士路线

路线|路径|频率

XXX A-B-C-D-E-F 30分钟
YYY A-B-C-D-E-F 60分钟
ZZZ A-D-F 10分钟

边缘表

来自|到|距离(m)|旅行时间(分)

A B 1200 3

B C 2400 5  等............................................

节点表

ID | Lat |长|

A

C等..............

让Dijkstra获得最短路径是A-D-E-F,我的问题是

  1. 如何使用我当前的数据结构告诉用户使用路由ZZZ到D然后更改为XXX到F(而不是YYY)?

  2. 我是否需要多次表示相同的边缘,以便区分边缘是XXX还是YYY?例如,XXX和YYY都从A-B行进,因此在我的数据库中会有两个相似的边,相同的距离,只有不同的是总线频率。或者我只需要一个边缘,然后使用其他方法告诉我使用哪个总线?

    假设一个拥有50条公交线路的城市,用于执行Dijkstra算法的边缘是否都来自所有50条公交线路(即使有一些重复?),或者每条边都必须具体,是否有任何方法可以这些重复的总线路径是否代表相同的边缘? 例如,30条公交线路经过相同的路径A到B,那么有什么方法可以简化它吗?

  3. 由于

0 个答案:

没有答案