我设法用 RNG 蛮力解决了这个问题,即使工作网格是 3x3,也需要大约 4-5 秒才能找到最佳解决方案。
我想知道如何在没有蛮力的情况下生成与蛮力相同的动作。
我将列出 2 个示例和蛮力找到的解决方案。我试图分析解决方案以找出它选择它们的原因,但我什么也想不通。
该游戏通过在两个方向(从左到右)和(从右到左)上使用循环旋转来工作
从左到右循环旋转这样做
If [a, b, c] then [b, c, a]
从右到左循环旋转这样做
If [a, b, c] then [c, a, b]
游戏数据可以这么说(它可以是 1 到 9 的任何排列)
例如
Data = 7, 2, 6, 1, 5, 4, 3, 8, 9
我可以用 8 种不同的方式移动桌子上的棋子。
1)基于行的循环旋转(从左到右)。
2)基于Row的循环旋转(从右到左)。
3) 基于列从上到下。
4) 基于列的自下而上。
现在 5 到 8 不需要 Column 或 Row,因为它们是对角线设置的。
5) 从左上到右下(从左到右)。
6)从左上到右下(从右到左)。
7)从右上到左下(从左到右)。
8) 从右上到左下(从右到左)。
数据加载如下
- 007 | 002 | 006
- 001 | 005 | 004
- 003 | 008 | 009
解决方案蛮力:
1)。[Top-Right] 到 [Bottom-Left](从右到左)
2)。从下到上,列:0
3)。从左到右,行:1
这是模拟的解决方案
1)。[Top-Right] 到 [Bottom-Left](从右到左)
- 007 | 002 | 003
- 001 | 006 | 004
- 005 | 008 | 009
2)。从下到上,列:0
- 001 | 002 | 003
- 005 | 006 | 004
- 007 | 008 | 009
3)。从左到右,行:1
- 001 | 002 | 003
- 004 | 005 | 006
- 007 | 008 | 009
这是示例 2,需要 6 步才能解决
- 009 | 008 | 007
- 006 | 005 | 004
- 003 | 002 | 001
解决方法:(6 步)
1)。[Top-Right] 到 [Bottom-Left](从右到左)
2)。从上到下,列:1
3)。从下到上,列:0
4)。[Top-Left] 到 [Bottom-Right](从左到右)
5)。从左到右,行:1
6)。从右到左,行:2
所以这是一个非常简单的难题,但找到有效的解决方案并不是一项简单的任务。有人可以指导我正确的方向。