【发布时间】:2023-03-09 07:25:02
【问题描述】:
我正在用 Java 开发 Kakuro 游戏。数独是一种类似于数独的游戏。
Kakuro 的目标是用 1 到 9 的整数填充那些空白块,使得每个“区域”中没有重复的数字,并且该区域中空白块中的所有数字总和为该地区的“hintblock”。上图中的区域示例用红色标记。
现在我想做的是编写一个可以自动解决给定 kakuro 谜题的 AI。这首先要求您需要从范围 (1,9) 的整数集中找到 K 个元素的所有可能组合,使得这些 K 个元素的总和等于该区域中“提示块”中指示的数字。 (在这种情况下,K 是该区域中空白块的数量)这是“子集问题”的变体,除了超集更加统一(1-9 的连续整数)并且子集具有固定大小K。 更好的是,超集的范围可以提前缩小。例如,请参见图片右侧的块。在这种情况下,总和为 24,K 为 3。通过在该区域中选择任意块并假设所有其他块都处于可能的最大值,我们可以推断任意块必须大于或等于 (24-( 9+8))=7。我们可以通过计算 (24-(1+2))=21 来计算最大值,这并不重要,因为 21>9。因此,超集变为 {7,8,9}。
这个区域是一个简单的例子,因为 K = Superset 大小。但是,如果 K 远小于超集大小,检查所有组合将(我不确定)导致计算 (SuperSize-K)!时间。这是低效的。我现在的问题是最适合这种情况的 子集和问题 的解决方案是否有任何变化?我用 java 编写代码,但欢迎使用任何编程语言,包括 SPL 和 BrainF*ck。
【问题讨论】:
标签: algorithm recursion subset-sum