我对这个问题的算法有一点问题。
问题陈述:
飞行旅行者航空公司 (FTAir) 需要一个程序来处理客户从某个始发城市飞往某个目的地城市的请求。对于每个客户,请说明是否存在从始发城市到目的地城市的FTAir航班序列,并生成行程 - 航班顺序。输入:三个输入文本文件,指定所有航班信息,如下所示: • FTAir服务的城市名称(至少15个城市)。 • 成对的城市名称;每对代表FTAir航班之一的始发地和目的地。 •一对城市名称;每对代表从某个始发城市飞往某个目的地的请求(至少 5 个不同场景的请求)。每个请求都被视为单程航班。
规则:
查找从始发城市到目的地城市的路径(如果存在)。维护有关其访问城市的顺序的信息。不要多次访问一个城市。如果有多个路径,您可以列出所有路径并查找访问量最少的城市。(可选)。此外,通过堆栈(使用链表)和递归的方法!
我的方法是:
首先,我们需要一个数据结构来包含所有输入的文本文件。假设我们在数组中有城市的名称,在 2D 数组中有一对城市(起点 --> 目的地),在 2D 数组中也有 reuqest。
对于请求矩阵中要退出的路径,它必须由我们的 FTAir 提供服务,因此对于每个请求,我们需要在城市数组中搜索起点和目的地,如果两者都匹配,那么只有我们继续下一步。
找到匹配项后,我们必须将请求来源映射到航班来源,即我们必须检查是否有任何航班从所需的出发地出发,如果没有,那么旅行请求也没有可能的路径。
但是,如果有匹配项,我们将该起点放在堆栈上并检查其目的地并将其与请求的目的地进行比较,如果这是匹配项,我们将获得直飞航班,如果没有将其放在堆栈上并查找目的地作为航班的 2D 数组中的原点。继续该过程,直到匹配为止。但是,如果我们两次访问一个城市呢?检查您在堆栈中输入的数据,如果发现重复数据,则中止!
我无法将我的想法转换为代码,有人可以在这里帮助我吗?
因此,让我们通过一个例子来研究这个问题。
我们有以下航空公司去的城市列表
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 数组保留为已访问[],并在使用 DFS 方法时,继续将城市标记为访问过。
希望这能消除您的一些疑虑。在下面的评论部分提出更多问题。