java - 如何递归地解决 ArrayLists 的问题
问题描述
我正在尝试编写一个“解决圆圈”的程序。Circle 类包含一个三角形对象的 ArrayList 和一个整数的 ArrayList。每个 Triangle 对象都有三个 int 实例字段,它们代表每个三角形顶点处的三个数字。还有一个 Pairs 类(你可以在“代码”部分看到我拥有的所有代码)这是一个使用四个三角形的设置示例,但未解决:
这是“解决”后的同一个圆圈:
第二张图中的Circle是一个求解的Circle,因为圆的任何弧上的数字都等于它旁边的两个顶点数之和:6 = 1+5, 15 = 6+9, 11 = 7+4 , 和 9 = 5+4。请注意,这是通过旋转给定的三角形获得的。这在代码中类似于简单地更改每个三角形的解决方案中存在的对(其中“对”是两个整数的对象,其中这些整数是每个三角形的圆上的值)
Circle 并不总是处于“已解决”状态。如果是这种情况,可以旋转三角形,使圆处于求解状态。任何给定圆的前提是存在已解决的状态,因此数字将始终对齐。
一个圆总是至少有两个三角形,并且没有(实际的)最大数量。每个给定的圆总是可解的,这意味着有一种方法可以旋转每个三角形,以便圆上的数字是来自两个不同三角形的两个相邻顶点之和的结果。
该程序的重点是不更改任何给定的实例字段;相反,我只想创建一个名为solveCircle 的方法,该方法返回一个ArrayList of Pairs,它表示Circle 的解决方案。在上面的示例中,solveCircle 方法将返回一个包含以下对的 ArrayList:(4,1)、(5,6)、(9,7)、(4,5)。这些对在解决方案中,因为它们都是三角形上的数字对,并且每一对也在圆上。请注意,解决方案围绕圆圈逆时针旋转。
我的直觉告诉我,这个过程应该涉及某种类型的递归,因为由于循环的循环性质,循环会很棘手;换句话说,我可以遍历每一对三角形以找到合适的解决方案,但很可能不止一个,并且将每个三角形与下一个总和的解决方案进行比较似乎效率低下;递归似乎是一个更好的选择,但我不确定将递归应用于什么......我应该使用什么算法,甚至是什么基本情况?
public class Triangle
{
private int num1;
private int num2;
private int num3;
public Triangle(int n1, int n2, int n3)
{
num1 = n1;
num2 = n2;
num3 = n3;
}
public ArrayList<Pair> getPairs()
{
ArrayList<Pair> pairs = new ArrayList<Pair>();
pairs.add(new Pair(num1, num2));
pairs.add(new Pair(num2, num3));
pairs.add(new Pair(num3, num1));
return pairs;
}
}
class Pair
{
private int p1;
private int p2;
public Pair(int x, int y)
{
p1 = x;
p2 = y;
}
}
public class Circle
{
private ArrayList<Triangle> triangles;
private ArrayList<Integer> sums;
public Wheel(ArrayList<Integer> s, ArrayList<Triangle> t)
{
triangles = t;
sums = s;
}
public ArrayList<Pair> solveCircle()
{
//need help here
}
}
解决方案
对于初始步骤,您调用助手三次:每对调用一次,直到返回成功(布尔值可用于指示成功。)
助手执行递归步骤。
对于递归步骤,你有一个在你身后延伸的总和,一个你必须结合起来才能满足该总和的整数,以及实现它的三种可能方法......但是,除非你的递归调用也返回成功,否则你不会返回成功
对于最后一步,不允许旋转,只有最终的真或假,我是否完成了我身后的总和。
推荐阅读
- entity-framework - 无法隐式转换类型'System.Collections.Generic.List
' 到 'DistributionEmail.Data.EmailInfo' - python - 试图抓取 forecast.weather.gov 并遇到问题,特别是从 WriteText 标签获取数据
- python - 使用系列的近似 pi
- java - Spring RestTemplate JSON 响应被截断
- ios - 如何对 Realm 中的对象进行异步排序
- node.js - 无法扩展接口“http.IncomingMessage”。您指的是 “implements” 吗?
- python - 我在运行 train.py 时遇到问题,我很困惑
- javascript - HTML5 drawImage:Chrome 比 Mozilla 慢九倍
- azure - Azure 资源
- python - 无法使用漂亮的汤访问某些标签