2010-01-12 203 views
3

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

+2

http://jung.sourceforge.net/ – jball 2010-01-12 20:36:00

+2

您是否关心连接数量,总体旅行时间,最小化停留时间? – jball 2010-01-12 20:38:04

+1

这听起来像是作业问题? – 2010-01-12 20:41:32

回答

6

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

2

直接航班文件产生一个图。节点是机场。边缘位于有直飞航班的机场之间,并说每条边都有重量。您想要找到A和B之间的所有简单路径,并且可能最终会收集路径集合。您可以只对图形进行深度优先搜索。编码图的一些常见方式是邻接列表(即,对于每个节点,存在边的节点的列表);以及其他编码方法。或N×N矩阵(对于N个节点)位置(i,j)中的值告诉你节点i和节点j之间边缘的成本。

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