【问题标题】:Recursive determination of all solutions from a cube tower从立方体塔递归确定所有解决方案
【发布时间】:2017-06-12 15:29:01
【问题描述】:

我必须解决一项任务,以确定 Java 中立方体塔的所有解决方案。

任务:
四个具有彩色表面(红色、蓝色、绿色、黄色)的立方体相互堆叠并旋转,这样四种颜色中的任何一种都不会在墙壁的每一侧出现两次。 我必须开发一个系统,该系统将递归确定立方体塔的所有解决方案。 (与名为 “Instant Insanity” https://en.wikipedia.org/wiki/Instant_Insanity 的谜题相比)

迭代解决这个难题相对容易,但我认为递归方法非常困难。

立方体类:

private String[] colour;

public Cube() {
    this.colour = new String[6];
    for(int i = 0; i < colour.length; i++) {
        colour[i] = colourRead();
    }
}

我还有两个函数来水平和垂直旋转立方体,一个获取颜色的函数和一个读取立方体颜色的函数。

Cube-Tower-Class:

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<>();
}

我还有一个获取立方体的函数和一个用于测试的函数,如果立方体塔的一侧有重复的颜色。

我不知道如何编写一个函数来递归地确定所有解决方案。也许有人对如何解决这个难题有建议。谢谢你的帮助!

【问题讨论】:

  • 在技术层面上,将迭代解决方案转换为递归解决方案(对于任何问题)只需将局部变量(从外部,但在循环中使用)转换为方法参数。然后,您可以进一步简化它们(如果信息过多,甚至可以将信息包装在一个对象中)。
  • 向我们展示您正在使用的迭代方法
  • @RAZ_Muh_Taz 还没有编码,但它基本上与不同立方体的位置有关:立方体有 24 个不同的位置,它们可以说谎。您可以通过旋转功能更改位置。因此,在立方体 1 所在的每个位置,您现在将立方体 2 旋转到其 24 个位置,对于立方体 2 所在的每个位置,您旋转立方体 3,依此类推。所以总共你有整个立方体塔的 24^3 种不同的解决方案。立方体 4 每次旋转后,检查塔的解是否合法。如果是,则将其添加到解决方案中,否则,循环继续工作。
  • @Rogue 谢谢你的帮助,我会试试的
  • 如果您可以使用迭代方法来工作,我很乐意帮助您使用递归方法。由于涉及的开销,递归方法往往比迭代方法花费更长的时间。

标签: java algorithm recursion


【解决方案1】:

这是递归方法的伪代码。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-31
    • 2015-10-08
    • 2013-07-22
    • 2015-10-25
    • 1970-01-01
    • 2022-07-12
    • 2021-11-03
    • 2018-12-30
    相关资源
    最近更新 更多