我对这个问题的算法有点问题。
问题陈述:
飞行旅客航空公司(FTAir)希望有一个程序来处理客户从某个始发城市飞往某个目的地城市的请求对于每一个客户,指示FITIR航班从原产地城市到目的地城市的顺序是否存在,并产生航班的顺序。输入:三个输入文本文件,指定所有航班信息,如下所示:
•FTAIR服务的城市名称(至少15个城市)。
•城市名称对;每对代表一架FTAIR航班的始发地和目的地。
•一对城市名;每一对代表从某个始发城市飞往某个目的地的请求(至少5个不同场景的请求)每一个请求都被认为是单程飞行。
规则:
找到一条从原点城市到目的地城市的路径,如果存在的话,请保持它访问城市的顺序的信息。不要一次访问城市。如果有多条路径,你可以列出所有的,找到最不被访问的城市。(可选)。另外,通过堆栈(使用链表)和递归来接近!
我的方法是:
首先,我们需要一个包含所有输入文本文件的数据结构。假设我们在一个数组中有城市的名称,在一个2d数组中有一对城市(origin--destination),在一个2d数组中也有reuqest。
对于在请求矩阵中退出的路径,它必须由我们的FTAir来服务,所以对于每个请求,我们需要搜索城市中的原点和目的地,如果两者都是匹配的,那么我们只进行下一步。
找到匹配项后,我们必须将请求源映射到航班源,即我们必须检查是否有任何航班需要从该源起飞,如果没有,则再次检查旅行请求没有可能的路径。
但如果有匹配项,我们将原点放在堆栈上,检查它的目的地,并将其与请求的目的地进行比较;如果是匹配项,我们有直飞航班,如果不是直飞航班,则将其放在堆栈上,并在航班的二维数组中查找作为原点的目的地。继续进行这个过程,直到有匹配的结果。但如果我们两次访问一个城市呢检查您在堆栈中输入的数据,如果发现重复数据,请中止!
我不能把我的想法转换成代码,有人能帮我吗?
最佳答案
所以让我们举个例子来看看这个问题。
我们有以下航空公司去的城市名单
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,那么答案是yes。
假设我问有没有从a到f的路径,那么应用dfs(a)会给我错误的答案,而我的答案是没有。
现在要检查您是否已经访问过一个城市,只需将gloval数组保持为visited[],并且在您使用DFS方法时,继续将城市标记为visited。
希望这能消除你的疑虑在下面的评论部分问更多的问题。