铁路线路的数据结构

时间:2011-12-12 09:30:19

标签: c++ algorithm data-structures

铁路线路的良好数据结构是什么?我有关于所有列车的信息,他们正在经过的所有车站。鉴于两个站点,我需要提出所有可能的路径。

我想出了一个图表,其中key是起始站,邻接列表表示它正在通过的站点。

但我认为这不会给我正确答案。

2 个答案:

答案 0 :(得分:4)

听起来像是一个直接的图形问题,而且(对我而言)模拟铁路网络实际看起来的方式听起来很直观。

也就是说,每个工作站都有一个图形节点,边缘代表它们之间的铁路连接。

然后问题就变成了图搜索,有很多算法可供选择。

答案 1 :(得分:3)

首先,你有铁路网络:这很自然地表示为站点是图形中的节点,铁路链路是连接节点的边缘。

其次,你有火车,换句话说,就是这些线路。这最自然地表示为通过上图的一组路径,每条路径对应不同的列车。

我假设您需要

形式的所有可能路线
  

在S0站乘坐火车T1,前往S1站,切换到T2列车,前往S2等...到达目的地。

在这种情况下,我会在单个多图结构中对铁路网和火车进行建模,多个边从站Sn到站Sm,每个边对应于从SnSm的不同火车。其结构将是一组节点,每个节点都有一个传出边列表。

然后执行简单的深度优先搜索,标记单个边以确保不会遍历边两次,如下面的生成器伪代码:

// 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)