算法:找到城镇之间的连接,限制列车的变化

时间:2012-04-04 16:10:41

标签: algorithm graph-algorithm

您将使用什么算法创建一个给定适当数据的应用程序(城市,火车路线,火车站列表)能够返回任意两个用户选择城市之间的连接列表?应用程序必须只选择那些属于已接受的列车更改限制的连接。

示例:如果我需要从巴黎到莫斯科旅游,我会问应用哪条火车。 1停止/切换 - 应用程序返回路线:火车1(巴黎 - 柏林) - >火车2(柏林 - >莫斯科)(不存在直接联系)。

图形示例 Map

http://i.imgur.com/KEJ3I.png

如果我向系统询问从 A镇镇G 的可能联系,我会收到回复:

  • 布朗线(0开关=直接)
  • 布朗线到B镇/橙线到G镇(1个开关)
  • 布朗线到B镇/橙色线到D镇/红线到G(2个开关)
  • ......所有其他可能性

而你的第二和第三选项比第一选项短,它是第一个应该具有优先级的选项(因为不涉及列车切换)。

2 个答案:

答案 0 :(得分:9)

假设唯一重要的是“停止/切换次数”,那么问题实际上是在未加权directed graph中找到最短路径。

图表模型为G = (V,E),其中V = {all possible stations}E = { (u,v) | there is a train/route from station u to station v }
注意:假设您的列车从a_0开始,路径通过a_1,a_2,... a_n:那么E将包含:(a_0,a_1),(a_0,a_2),..,(a_0,a_n)以及{{ 1}}正式:对于每个(a_1,a_2),(a_1,a_3),... :( a_i,a_j)∈E。

BFS解决了这个问题,complete [总是找到解决方案,如果有的话]和optimal [找到最短路径]。

如果边[路线]被加权,则需要dijkstra's algorithm之类的东西。

如果您需要所有可能路线的列表,可以使用Iterative-Deepening DFS,而无需维护访问集,并将找到目标的所有路径打印到相关深度。 [BFS无法使用clique的反例]返回所有路径

答案 1 :(得分:0)

我认为您需要计算所有对最短路径。检查http://en.wikipedia.org/wiki/Floyd%E2%80%93Warshall_algorithm