您将使用什么算法创建一个给定适当数据的应用程序(城市,火车路线,火车站列表)能够返回任意两个用户选择城市之间的连接列表?应用程序必须只选择那些属于已接受的列车更改限制的连接。
示例:如果我需要从巴黎到莫斯科旅游,我会问应用哪条火车。 1停止/切换 - 应用程序返回路线:火车1(巴黎 - 柏林) - >火车2(柏林 - >莫斯科)(不存在直接联系)。
图形示例
如果我向系统询问从 A镇到镇G 的可能联系,我会收到回复:
而你的第二和第三选项比第一选项短,它是第一个应该具有优先级的选项(因为不涉及列车切换)。
答案 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。