我正在创建一个益智游戏,虽然可以手动玩简单的关卡,但要通过计算机程序来解决更难的关卡。拼图是六角板上的洪水填充。您可以在这里尝试原型。
(来源:hacker.org)
以下是拼图的工作原理:通过从顶部选择一种颜色,您从左上角的图块开始执行泛洪填充。这逐渐将电路板转换为纯色。挑战是在一定数量的动作中做到这一点。
我已经创建了几个类似的谜题,关键是使用一种算法来生成在不知道它们是如何创建的情况下难以解决的板。例如,在这里我们可以通过反转洪水填充来生产板:从实心板向后工作,直到它被取消淹没。我们知道这需要多少步,并且可以将其设置为解决方案的下限。
我面临的问题是,当我尝试这种方法时,我的上限太高了。即使通过随机移动,在这个移动次数内解决难题也变得微不足道。
一种不是解决方案的方法是生成一个随机棋盘,然后对其进行优化求解并将其设置为目标。关键是要创建一个谜题,其中最佳解决它是 NP 时间或至少是一个硬 P。
所以我正在寻找的是一种算法,它可以生成极其坚硬的电路板,随着它们变得越来越大,解决它们成为一个严峻的挑战。