一般数独生成的思路便是随机的一个方格生成一个数,依据数独给的限制条件逐渐填满其余剩下的80个方格,然后再随机依次扣除方格数字来生成数独题,根据剩余数字的多少来决定数独的难度。
1、求解子程序。这个子程序可用dancing links算法,不是逻辑解法。可以在非唯一解的情况下找到任意一个解。
2、随机放入11个数,用0中的子程序求任意解生成终盘。(相关研究表明,放入11个数,有解的概率约99.7%,12个数有解概率降低不少,10个数虽然概率更高,但求解时间增长。故11个合适。(此为最初思路))
3、生成终盘后,不断随机挖掉一个数。每次挖掉一个数,检查是否存在唯一解。方法:如果挖掉一个1,在该方格中依次填入2~9,调用0中的子程序求解。
4、判断难度。比较简单的方法是,计算每一个空格有多少个候选数,总候选数越多,可能越难。不保证有逻辑解。
对于生成数独问题,我们选择的是回溯法,回溯法有“通用的解题法”之称。用它可以系统的搜索一个问题的所有解或任一解,是一个既带有系统性又带有跳跃性的搜索算法。利用回溯法,可以多次尝试数字,来达到生成数独题目的要求。
运用回溯法解题通常包含以下三个步骤:
1、针对所给问