只是想分享我在这个问题上的最终方法。这是大学项目的一部分,因此它可能不完全适合现实世界使用。它必须相当快才能在 Windows Mobile 设备上运行。
我最终使用了 4 个表(SQLite)。一张表保存公共汽车列表,第二张保存车站列表。另一张表保留了组合 - 哪些公共汽车在特定车站停靠,从该车站到哪里以及需要多长时间(分钟)。必须存储所有组合。最后一张表是一个简单的时间表。对于每个车站,它列出了停在那里的每辆公共汽车和时间(我将时间存储为整数值 - 14:34 是 1434,以便更快地进行比较)。
我使用了双向广度优先搜索算法。为起始站和目标站检索相邻站(可直接访问)。如果这两个“图”在一个站点上重叠,则存在从站点 A 到站点 X 的路径。例如,从 A 站您可以到达 B、C、D、E 站(通过使用特定的巴士)。从目的地 X 站您可以直接到达 N、C、Z。这两个图在 C 站重叠。因此存在路径 A -> C -> X。如果在第一次迭代中没有找到路径,则算法继续并再次展开图 (BFS)。
第一步不考虑时间 - 这使它足够快。您只会获得可能路径的列表以及必须使用这些路径的总线列表。在最后一步评估时间,您浏览可能路径列表并检查公共汽车是否在特定时间内行驶(每站增加时间)。
在一个拥有 250 个车站和 100 多条公共汽车/铁路的小城市上,这些方法最多可进行 3 次更改(您必须在旅途中更改公共汽车)。计算只需几秒钟。但是我不得不将整个数据库加载到内存(字典)中以加快查询速度,这需要太长时间。
我认为这不适用于大型网络。但它适用于单个中小型城市的公共交通。