【发布时间】:2011-03-02 19:13:03
【问题描述】:
我正在创建一个游戏,用户将看到 2 组彩色图块。为了确保拼图可以解决,我从一组开始,将其复制到第二组,然后将瓷砖从一组交换到另一组。目前,(这就是我的问题所在)交换次数由用户正在玩的级别决定 - 1 级交换为 1 级,2 次交换为 2 级等。相同数量的交换用作目标游戏。用户必须通过将瓷砖从一组交换到另一组来完成拼图,以使两组匹配(按颜色)。只要 2 组匹配,(用户)已解决的拼图中的图块顺序无关紧要。
我遇到的问题是,当我用来生成拼图的交换次数接近每组中的瓷砖数量时,拼图变得更容易解决。基本上,您可以按照第二组所需的任何顺序从一组中拖动,然后用大量的动作解决难题。我要做的是在完成拼图后,计算解决拼图所需的最小移动次数。同样,这几乎总是少于用于创建拼图的交换次数,尤其是当交换次数接近每组中的瓷砖数量时。
我的目标是计算最好的情况,然后给用户一个“捏造因素”(即最小移动次数的 1.2 倍)。在此数量的移动下解决难题将导致通过关卡。
关于我目前如何配置游戏的一些背景知识:
级别 1 到 10:每组 9 个图块。 5 种不同颜色的瓷砖。 11 到 20 级:每组 12 个图块。 7 种不同颜色的瓷砖。 21 至 25 级:每组 15 张牌。 10 种不同颜色的瓷砖。
不允许在集合内交换。
对于每个级别,至少有 2 个给定颜色的图块(已解决的谜题中每组一个)。
有没有任何人可以推荐的算法来计算解决给定谜题的最小移动数?
【问题讨论】:
-
Bart K,我对“set”这个词的使用不符合这个定义。 “集合”实际上是用于指示图块颜色的潜在非唯一值的数组。通过将一组图块(以前称为“组”)中的图块与另一组交换图块来执行交换。瓷砖 A 将移动到瓷砖 B 的位置,反之亦然。我创建了一个游戏板图表,但我无法正确粘贴它以使其可读。
-
我不确定您指定了您的游戏/拼图是什么,或者它背后的规则。您是否打算将您的答案与此相关,或者作为一般难题的一般案例?
-
mstksg,我对这个特定难题的解决方案很感兴趣。您能告诉我哪些信息可以帮助您了解游戏玩法吗?
-
让我试试看我是否明白。你有两组不同颜色的瓷砖,按一定的顺序排列,目标是试图让两组彼此相同?所以这些是可能的“给定”起始位置:RGB|BRG、RRB|BGG。所以这些是期望的最终状态:RGR|RGR,RBG|RBG。我说的对吗?