曼哈顿这个益智游戏的功能

时间:2014-03-30 02:40:17

标签: algorithm

我正在寻找这种游戏的优化解决方案:

在这个棋盘游戏中给出一个尺寸为3 x 5的棋盘游戏。有14件和一个空槽(作为15个益智游戏),空槽周围的所有部件都可以移动到此。每件作品都会分配一种颜色(可以在很多作品上复制)。

当最后一行与第一行相同时,游戏将结束。

例如:

初始状态是:

     | red   | red    | red | red
red  | blue  | white  | blue| blue
white| yellow| blue   | red | yellow

有很多方法可以结束目标。这是一种方式,需要23步:

red | white | yellow | red | blue
red | blue  | red    | blue|
red | white | yellow | red | blue

还有其他,只需要16个动作:

red   | blue  | red   | red | blue
yellow| white | white |     | yellow
red   | blue  | red   | red | blue

所以,我需要找到如何使用最小移动来实现最终目标。

我尝试(并且考虑)使用Mahattan距离来解决这个问题。但我不知道,如何为这个问题定义一个Mahattan函数。对此有何想法?

谢谢:)

2 个答案:

答案 0 :(得分:1)

在每列中都有一对需要具有相同颜色的图块。用于估算移动次数的启发式算法,以使该对成为特定颜色(例如红色),是从顶部图块到最近的红色图块的曼哈顿距离加上从底部图块到最近的红色图块的曼哈顿距离。

     | red   | RED  * | red | red
red  | blue  | white  | blue| blue
white| yellow| blue * | RED | yellow

对于第三列中的一对图块(标有*),最接近的红色图块(大写)的距离为0和1,因此估计值为0 + 1 = 1。 / em>的

对其他颜色也可以这样做。该对的最终估计是所有颜色的最小值,因为任何颜色都可以。

对于上面板中的第三列,其他估计值为1 + 1 = 2表示白色,2 + 1 = 3表示黄色,2 + 0 = 2表示蓝色。最小值为1.

整个董事会的总估计数是所有货币对的估计总和。


这是一个非常粗略的启发式方法。首先,它没有考虑到需要两个相同颜色的不同瓷砖的事实。

一种可能的改进是从该对进行双源宽度优先搜索以找到最接近的特定颜色的两个图块。搜索可以转换为简单的循环,并且可以同时搜索所有颜色。

答案 1 :(得分:1)

假设我们有current state

     | white
red  | blue

这是goal state

white | red
blue  | 

然后我们有以下启发式:

h = SUM { Manhattan_Distance(x) | x is a unique cell }

在这里,我们有例如:

xxxx | white
xxxx | xxxx

white | xxxx
xxxx  | xxxx

所以Manhattan_Distance(white) = 1

xxxx | xxxx
red  | xxxx

xxxx | red
xxxx | xxxx

Manhattan_Distance(red) = 2

xxxx | xxxx
xxxx | blue

xxxx | xxxx
blue | xxxx

Manhattan_Distance(blue) = 1

所以,h = SUM { 1, 2, 1 } = 3


相邻州是我们可以通过合法行动获得的州。

我们可以使用g = min(h)

进行线性搜索

或带有g(x) = h(x) + depth(x)

的BFS