我必须解决一个任务,以确定所有的解决方案,从一个立方体塔在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

07-26 03:54