数独生成难度

时间:2014-01-20 20:39:05

标签: algorithm sudoku

我目前的计划是生成随机初始板并随机删除数字。但是,有没有办法确保我的谜题在某个难度范围内,如“正常”,而不会意外删除数字,以便谜题太容易或太难?

此外,我是否必须包含模拟板解算器以确定拼图是否无法解决或太容易?

3 个答案:

答案 0 :(得分:1)

难度通常指的是从我在数独中看到的开头可用的未编号空间的数量。为什么不从一个完全解决的随机创建的板开始,然后从那里开始删除数字,并从最解决的行/列/框开始到最少解决。然后你可以有一个变量来检查删除的空格是否已达到限制。

我建议基本上从一个已解决的世界开始,这是一个前驱函数,它找到哪个行/列/框最能解决,即具有最可用的正确数字。您可以根据需要在3个不同的区域确定其含义。然后是一个后继函数,它从当前行/列/框中删除一个空格,并更新每个空格以反映更新。比如说你有0-8行的int数组,cols 0-8的另一个数组,以及0-8行。行从0到8从顶部到机器人,从0到> 8从左到右,向下框0-> 8向右然后向下然后向下行并重复。在指数中以9的每个开始一个。每次删除一个数字时,请说删除(row#,col#)。然后放row[row#]--col[col#]--box[(row#/3)*3 + col#/3]--。然后递增一个已删除的数字计数器,并根据您的难度进行检查,这可能会被可能的总数删除。 *注意(行#/ 3)是整数除法。

答案 1 :(得分:1)

随机删除数字并不能保证有一个解决方案。这意味着它无法解决,因为SuDoKu原则上每个拼图只有一个解决方案。 Antyhing其他,我们被投入到一个猜测和检查即兴游戏,模糊地类似于原始。我绝对建议研究你想要模拟的谜题以及如何生成谜题。

此问题与How to generate Sudoku boards with unique solutions

重复

答案 2 :(得分:0)

经过一些研究后发现,如here所述,没有简单的方法可以准确地确定人类的困难。最简单的方法是计算空白方块的数量。

但是,某些模式比其他模式更容易找到,例如,如果可以独立于其他模式解决方格,或者只有一个方案可用于方格。难度和求解时间需要对相当多的不同模式进行一些统计分析,以及有多少机会可以使用策略。