我必须解决一个任务,以确定所有的解决方案,从一个立方体塔在Java。
任务:
四个具有彩色表面(红色、蓝色、绿色、黄色)的立方体相互堆叠并旋转,这样四种颜色中的任何一种都不会在墙的每一侧出现两次。
我必须开发一个系统,它将递归地确定立方体塔的所有解决方案。
(与一个叫做“瞬间疯狂”的谜题相比)
迭代地解决这个难题相对容易,但在我看来递归方法非常困难。
多维数据集类:
private String[] colour;
public Cube() {
this.colour = new String[6];
for(int i = 0; i < colour.length; i++) {
colour[i] = colourRead();
}
}
我还得到了两个函数来水平和垂直旋转立方体,一个是颜色的get函数,另一个是立方体的颜色读取函数。
立方体塔等级:
private Cube[] cube;
private ArrayList<String> solutions;
private int solutionCounter = 1;
public CubeTower() {
this.cube= new Cube[4];
this.cube[0] = new Cube();
this.cube[1] = new Cube();
this.cube[2] = new Cube();
this.cube[3] = new Cube();
this.solutions = new ArrayList<>();
}
我还得到了一个立方体的get函数和一个要测试的函数,如果立方体塔的一边有颜色的复制品。
我不知道如何编写一个函数递归地确定所有的解。也许谁都有解决这个难题的建议谢谢你的帮助!
最佳答案
这是递归方法的伪代码。
function findAllSolutions(cubeTower):
if cubeTower is None:
cubeTower = []
solutions = []
if length(cubeTower) < 4:
for each cube in possible cube rotations:
cubeTower.push(cube)
solutions.appendAll(findAllSolutions(cubeTower))
cubeTower.pop(cube)
else:
if (isValidSolution(cubeTower)):
solutions.push(copy of cubeTower)
return solutions