铁路线路的良好数据结构是什么?我有关于所有列车的信息,他们正在经过的所有车站。鉴于两个站点,我需要提出所有可能的路径。
我想出了一个图表,其中key是起始站,邻接列表表示它正在通过的站点。
但我认为这不会给我正确答案。
答案 0 :(得分:4)
听起来像是一个直接的图形问题,而且(对我而言)模拟铁路网络实际看起来的方式听起来很直观。
也就是说,每个工作站都有一个图形节点,边缘代表它们之间的铁路连接。
然后问题就变成了图搜索,有很多算法可供选择。
答案 1 :(得分:3)
首先,你有铁路网络:这很自然地表示为站点是图形中的节点,铁路链路是连接节点的边缘。
其次,你有火车,换句话说,就是这些线路。这最自然地表示为通过上图的一组路径,每条路径对应不同的列车。
我假设您需要
形式的所有可能路线在S0站乘坐火车T1,前往S1站,切换到T2列车,前往S2等...到达目的地。
在这种情况下,我会在单个多图结构中对铁路网和火车进行建模,多个边从站Sn
到站Sm
,每个边对应于从Sn
到Sm
的不同火车。其结构将是一组节点,每个节点都有一个传出边列表。
然后执行简单的深度优先搜索,标记单个边以确保不会遍历边两次,如下面的生成器伪代码:
// path is a list of edges
// src,dst are nodes
procedure generate_route (path, src, dst)
if src == dst
yield path
else
for e in all outgoing edges of src
if e is not visited
mark e as visited
generate_route (path + e, e.dst, dst)