飞行旅行者航空公司

时间:2017-05-14 17:57:29

标签: algorithm recursion linked-list stack

我对这个问题的算法有点问题。

问题陈述:

飞行旅行者航空公司(FTAir)希望有一个程序来处理客户从某个城市飞往某个目的地城市的请求。对于每个客户,指示是否存在从原始城市到目的地城市的一系列FTAir航班,并生成行程 - 航班序列。输入:三个输入文本文件,指定所有航班信息如下: •FTAir服务的城市名称(至少15个城市)。 •成对的城市名称;每对代表FTAir航班之一的起点和终点。 •一对城市名称;每对代表一个从某个起源城市飞往某个目的地的请求(至少5个具有不同场景的请求)。每个请求都被视为单向航班。

规则:

查找从原始城市到目的地城市的路径(如果存在)。获取有关其访问城市的顺序的信息。不要多次访问城市。如果有多条路径,您可以列出所有路径并查找访问量最少的城市(可选的)。此外,通过堆栈(使用链接列表)和递归方法!

我的方法是:

首先,我们需要一个包含所有输入文本文件的数据结构。假设我们有一个数组中的城市名称,二维数组中的城市对(origin - > destination)和二维数组中的reuqest。

对于要退出的请求矩阵中的路径,它必须由我们的FTAir提供,因此对于每个请求,我们需要搜索城市数组中的原点和目的地,如果两者都匹配,那么我们只进行我们的下一步。

在找到匹配后,我们必须将请求来源映射到航班起点,即我们必须检查是否有来自所需原点的航班,如果没有,那么再次没有可能的旅行请求路径。

但是如果有匹配,我们将该原点放到堆栈并检查它的目的地并将其与所请求的目的地进行比较,如果这是匹配我们有直接航班并且如果没有将它放在到堆栈并寻找目的地作为飞行的2D阵列中的原点。继续执行该程序,直到匹配为止。但是,如果我们两次访问一个城市呢?如果发现重复数据,请检查您在堆栈中输入的数据,中止!

我无法将我的想法转换为代码,有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

让我们举个例子来看看这个问题。

我们有以下航空公司所在的城市列表

1. Cambridge (A)
2. Harvard   (B)
3. Hampshire (C)
4. Toronto   (D)
5. Montreal  (E)
6. Quebec    (F)

现在我们有一对城市的映射对,在这些城市之间往返航班。

1. (A,B)
2. (C,D)
3. (D,E)
4. (B,C)

所以现在如果在纸上画这个,我们有5个城市的地图就像这样

A -> B -> C -> D -> E

所以现在如果你问我是否想要从A到C旅行,是否有路径,你可以简单地启动DFS(A),如果你达到C,那么答案是肯定的。

假设我问是否有从A到F的路线,那么应用DFS(A)会给我假,我的答案是否定的。

现在要检查你是否已经访问过某个城市,只需将一个全局数组保存为访问[],然后沿着DFS方法继续标记所访问的城市。

希望这能解除你的疑虑。在下面的评论部分提出更多问题。