我将此编码问题作为一项功课,由于执行解决方案的内存和时间限制,我无法解决。作为一个注释,我查看了StackOverflow上是否允许这样的问题以及我所理解的那些问题,所以请不要仅仅为了这个问题而进行投票。所以这是条件:
约翰作为他的生日礼物获得了飞机订阅。在此之后,他决定访问尽可能多的国家。但要进入一些国家,他需要签证,而且他不想在大使馆里浪费时间。还提供飞机飞行的沼泽路线以及不需要签证的国家名单。你需要找到约翰可以访问的国家数量。
输入:在第一行中,给出了以空格分隔的3个数字:国家数量N,订阅M中的航班数量以及没有签证K的国家数量。国家从1到N的数字,约翰住在一个1号的国家。
在接下来的M行中有成对的自然数Ai和Bi,这意味着国家之间的Ai和Bi平面旅行是可用的(两个方向 - 从Ai到Bi,以及从Bi到Ai)。
接下来有K行,其中包含一个数字 - 行i
中的数字为Vi。约翰不需要签证V1,V2,...,Vk。其中一个数字肯定是1.
输出:您需要输出一个数字 - 约翰可以访问的国家数量最多,而不需要在需要签证的国家/地区登陆。
限制: 1&lt; = N,M <= 1000000; 1 <= K,Ai,Bi,Vi,&lt; = N
我只遇到了一个解决方案 - 创建一个布尔数组canFlight [1000000] [1000000],如果从一个国家到另一个国家/地区有可用的行程,它将存储值为true:假设canFlight [x] [y] == true ,这意味着你可以从x国飞往y;然后创建一个递归函数来找到解决方案。这种方法的问题是数组方式太大了,我没有其他想法。
我想听听没有与编程语言相关的解决方案(尽管c ++或java中的代码片段很好)。
答案 0 :(得分:1)
由于这是一个家庭作业问题,我不打算给你答案,但你可能想要阅读Dijkstra's algorithm和A* algorithm以及相关图表搜索算法的侧边栏。这些页面。