航班时刻表算法

时间:2010-01-12 20:33:15

标签: java algorithm data-structures graph

我有一份所有直飞航班的清单。从这里我想得到从A到B的连接航班。这个问题的算法或数据结构是什么?感谢。

3 个答案:

答案 0 :(得分:6)

基本上,这是遍历图表的问题,其中每个出发或到达将是一个节点,并且每个航班都是边缘。您通常会将成本应用于边缘 - 取决于用户的偏好,“成本”可能是机票的成本(获得最低价格)或飞行时间(以获得最短的飞行时间)。在同一机场的到达和离开将通过边缘连接,其成本是停留时间(从价格角度来看,该边缘通常具有零成本)。

答案 1 :(得分:3)

直飞航班文件会生成图表。节点是机场。边缘在具有直接飞行的机场之间,并且说每个边缘具有重量。您想要找到A和B之间的所有简单路径,并且可能希望最终得到一组路径。您可以只对图表进行深度优先搜索。

对图形进行编码的几种常用方法是邻接列表(即,对于每个节点,存在边缘的节点列表);或NxN矩阵(对于N个节点)位置(i,j)中的值告诉您节点i和节点j之间的边缘成本。

鉴于数据结构。您可以使用从节点A开始并在节点B处终止的深度优先搜索。您需要确保阻止算法重新访问当前路径上已有的节点以防止循环。

答案 2 :(得分:1)

经典问题Shortest path problem。如果您正在查看算法,维基百科页面中列出了一些选项,或者有ACO等算法可供选择,但这取决于用例以及如何提供解决方案。

为清楚起见,请注意,这是traveling salesman problem的变体,因此是NP-complete