创建十六进制洪水拼图的算法

标签 algorithm hex puzzle flood-fill

我正在创建一款益智游戏,虽然可以手动玩简单的关卡,但要通过计算机程序来解决更难的关卡。拼图是六角板上的洪水填充。你可以试试样机here .

alt text
(来源:hacker.org)

拼图的工作原理如下:通过从顶部选择一种颜色,您可以从左上角的图 block 开始进行整体填充。这逐渐将板转换为纯色。挑战是在一定数量的 Action 中做到这一点。

我已经创建了几个与此类似的谜题,关键是使用一种算法来生成在不知道它们是如何创建的情况下难以解决的板。例如,在这里我们可以通过反转洪水填充来生产一 block 板:从一 block 实心板向后工作,直到它没有被淹没。我们知道这需要多少步,并且可以将其设置为解决方案的下限。

我面临的问题是,当我尝试这种方法时,我的上限太高了。在这个移动次数内解决难题变得微不足道,即使是随机移动也是如此。

一种不是解决方案的方法是生成一个随机板,然后对其进行最优求解并将其设置为目标。重点是创建一个难题,其中最佳解决方案是 NP 时间或至少是一个困难的 P。

所以我要寻找的是一种算法,它可以生成极其坚硬的电路板,随着它们变大,解决它们将成为一个严峻的挑战。

最佳答案

在进行 RSA 加密时,我们找不到素数,我们选择随机数,然后对它们应用测试,使我们越来越有可能证明该数字是素数。

我的建议是一样的。尝试找到使拼图很有可能具有所需属性的条件,并针对这些条件进行测试。或者,您可以使用遗传算法/神经网络并训练它们识别“好”的谜题,这其实是一回事。

关于创建十六进制洪水拼图的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1127225/

相关文章:

用于计算大量文档(例如圣经书籍)相似度的算法

更改特定索引处的十六进制数组

javascript - 在 for() 循环中声明的 Javascript 变量的范围是什么?

java - 使用 Java Stream 查找最大公约数,无需递归 while/for 循环

c# - 为什么这种洪水填充算法会导致堆栈溢出?

c++ - gdb 地址和 "real"地址之间的区别?

用于匹配文件中的十六进制数字的 Java 正则表达式

c - 具有最小复杂度的 Anagram 算法

java - 除了维基百科页面上列出的那个,还有其他 Java quines 吗?

python - 构建 HTML Diff/Patch 算法