使用递归查找数组中元素的所有组合

时间:2017-05-27 22:01:54

标签: java recursion

我知道有很多类似于这个的问题,我在过去的一小时内对它们进行了审核,但是我无法弄清楚如何使用提供的答案来解决我的问题。

我的任务如下:

  

编写一个程序,提示用户输入城市列表,其中   每个城市都有一个名称和x和y坐标。毕竟是所有城市   已经输入,程序应该使用递归算法   打印从中开始的所有可能路线的长度   第一个城市进入,在最后一个城市结束,并访问每个城市   在列表中。对于每个路线,程序应打印名称   访问的每个城市,其次是路线的长度。

我解决了这个问题,我可以弄清楚大部分代码。让我陷入困境的是找到第一个和最后一个城市之间所有可能的组合。我该怎么办呢? 我试图用一个简单的5个整数数组来解决它,对于我的生活,我无法弄清楚如何打印所有组合。

你能帮助我克服这个可怕的问题吗?

谢谢。

3 个答案:

答案 0 :(得分:0)

我建议您使用图表,而不是使用数组。

您可以在此处了解有关旅行商问题的更多信息TSPBrute-force for TSP

答案 1 :(得分:0)

您是否被迫使用递归算法?

如果不是,这是我的建议:

假设输入的城市是A,C1,...,Cn,B,其中A和B是第一个和最后一个城市。第一个和最后一个城市无法更改,因此您应该计算n个城市的所有组合。要计算所有组合,您可以从0到2 ^ n-1进行计数。对于计数器的每个值,您有一个路径形式A到B.每个计数器值的每个位可以与一个城市(Ci)相关。现在,对于计数器的每个值,您可以打印A到B的路径(带有一些Ci):

  • 如果计数器值中的城市的相关位为0,那么相关城市不是路径中的已查看城市
  • 如果某个城市的相关位数为1,那么相关城市就是路径中的被查看城市。

答案 2 :(得分:0)

这是一种众所周知的图表方法。如果您对图表有所了解,那么只需看一眼DFS (recursively),就可能满足您的期望。