【问题标题】:Flying Traveler Airline Company飞行旅行者航空公司
【发布时间】:2017-10-13 12:16:25
【问题描述】:

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

问题陈述:

The Flying Traveler Airline Company (FTAir) 需要一个程序来处理客户从某个出发城市飞往某个目的地城市的请求。对于每个客户,说明是否存在从始发城市到目的地城市的 FTAir 航班序列,并生成行程 - 航班序列。输入:三个输入文本文件,指定所有航班信息,如下所示: • FTAir 服务的城市名称(至少 15 个城市)。 • 成对的城市名称;每对代表 FTAir 一个航班的出发地和目的地。 • 一对城市名称;每对代表一个从某个出发城市飞往某个目的地的请求(至少 5 个不同场景的请求)。每个请求都被视为单程航班。

规则:

找到从起点城市到目的地城市的路径(如果存在)。维护有关它访问城市的顺序的信息。不要多次访问一个城市。如果有多个路径,您可以将它们全部列出并找到访问量最少的城市。 (可选的)。此外,通过堆栈(使用链表)和递归方法!

我的做法是:

首先,我们需要一个数据结构来包含所有输入文本文件。假设我们有一个数组中的城市名称,二维数组中的一对城市(起点 --> 目的地),以及二维数组中的请求。

对于请求矩阵中的出口路径,它必须由我们的 FTAir 提供服务,因此对于每个请求,我们需要在城市数组中搜索起点和终点,如果两者都匹配,那么只有我们继续我们的下一步。

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

但是,如果匹配,我们将该起点放入堆栈并检查其目的地并将其与请求的目的地进行比较,如果匹配,我们就有直飞航班,如果没有放入到堆栈并在航班的二维数组中查找作为起点的目的地。继续执行该过程,直到匹配。但是如果我们两次访问一个城市呢?检查你在堆栈中输入的数据,如果发现重复数据,则中止!

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

【问题讨论】:

  • 我们不能在这里使用图形数据结构吗,如果有从起点到终点的路径,我们可以很容易地找到图形和应用 DFS,并且 DFS 使用递归,让我知道我们是否可以使用图表
  • 是的,我们可以使用任何实现递归或堆栈的方法(使用链表)!

标签: algorithm recursion linked-list stack


【解决方案1】:

那么让我们通过一个例子来看看这个问题。

我们有以下航空公司去往的城市列表

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) 会给我错误,我的答案是否定的。

现在要检查您是否已经访问过一个城市,只需将 gloval 数组保持为visited[],然后在执行 DFS 方法时,继续将城市标记为已访问。

希望这能消除您的一些疑虑。在下面的评论部分提出更多问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-28
    • 1970-01-01
    • 2015-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-16
    • 1970-01-01
    相关资源
    最近更新 更多