0

我正在尝试创建一个程序,该程序将找到解决具有以下规则的难题的步骤:

  • 给定 4x4 网格中的任何一组颜色,尝试匹配具有相同颜色数量的结束模式。
  • 颜色不会交换,而是水平或垂直旋转,这样

{W,W,B,W}

可以旋转到

{W,W,W,B}

{B,W,W,W}

{W,B,W,W}

  • 整个谜题不到 16 个步骤即可解决。

我已经想出了如何存储拼图本身的数据,但我正在努力寻找一个可以显示步骤的解决方案。由于深度限制为 16 步,我可以尝试暴力破解,但真的不知道如何建立模式。

这类似于解决魔方,我已经查看了以下资源:

  • stackoverflow.com/questions/34656587/solving-rubiks-cubes-for-dummies/34656726#34656726

  • stackoverflow.com/questions/5563671/solving-rubiks-cube-programmatically

  • amzi.com/articles/rubik.htm

  • chessandpoker.com/rubiks-cube-solution.html

和 15 个数字的问题

  • stackoverflow.com/questions/3621623/how-to-programatically-solve-the-15-moving-numbers-puzzle

为了使这个问题尽可能清楚:a) 存储/打印步骤和 b) 找到所需步骤最少的解决方案的好方法是什么?

4

1 回答 1

0

我想我无法解释没有图片的树。

假设你有这个起始模式:

[W, W, W, B]
[W, W, W, B]
[B, W, W, W]
[W, W, W, B]

这将是树的顶部节点。0 级。

所以现在,我们做了所有可能的水平和垂直旋转。先水平向右。

[B, W, W, W]
[W, W, W, B]
[B, W, W, W]
[W, W, W, B]

[W, W, W, B]
[B, W, W, W]
[B, W, W, W]
[W, W, W, B]

[W, W, W, B]
[W, W, W, B]
[W, B, W, W]
[W, W, W, B]

[W, W, W, B]
[W, W, W, B]
[B, W, W, W]
[B, W, W, W]

水平向左。

[W, W, B, W]
[W, W, W, B]
[B, W, W, W]
[W, W, W, B]

[W, W, W, B]
[W, W, B, W]
[B, W, W, W]
[W, W, W, B]

[W, W, W, B]
[W, W, W, B]
[W, W, W, B]
[W, W, W, B]

[W, W, W, B]
[W, W, W, B]
[B, W, W, W]
[W, W, B, W]

垂直向上

[W, W, W, B]
[B, W, W, B]
[W, W, W, W]
[W, W, W, B]

[W, W, W, B]
[W, W, W, W]
[B, W, W, B]
[W, W, W, B]

垂直向下

[W, W, W, B]
[W, W, W, B]
[W, W, W, W]
[B, W, W, B]

[W, W, W, B]
[W, W, W, B]
[B, W, W, B]
[W, W, W, W]

由于第二列和第三列都是 W,所以我们只有垂直向上和垂直向下两种模式。

我们在级别 1 共有 12 个模式。

我们非常有条不紊地搬家。我们的动作没有随机性。水平向右,水平向左,垂直向上,垂直向下。

现在,在第 1 层获取 12 种模式中的每一种,并生成 16 种模式。您不必保存与级别 0 和级别 1 的模式匹配的模式。

生成和保存的模式构成级别 2。

继续生成每个级别,直到达到 16 级或找到解决方案。因为您要从树级别中删除重复项,所以您不会在级别 16 上达到 16 到 16 次幂节点的理论最大值。

如果有多个解决方案且移动次数最少,则完成关卡。

于 2016-01-22T08:54:19.860 回答