上面是原题,我已经把这题解成这样了,但不知道用什么方法找下一个解,求教(不需要解题,只要说可以用什么方法找下一个解就好了)
先看第二排,先差2个空,是3和8,位置不确定,但是知道是这两个数
那么左上的宫九格其他两个空就不能有3了。
上面是原题,我已经把这题解成这样了,但不知道用什么方法找下一个解,求教(不需要解题,只要说可以用什么方法找下一个解就好了)
先看第二排,先差2个空,是3和8,位置不确定,但是知道是这两个数
那么左上的宫九格其他两个空就不能有3了。
看《算法的乐趣》,试着用非递归穷举来解数独,看效率如何!
数独游戏,经典的为9×9=81个单元格组成的九宫格,同时也形成了3×3=9个小九宫格,要求在81个小单元格中填入数字1~9,并且数字在每行每列及每个小九宫格中都不能重复。
相关二十格:一个数字只与其所在行列及小九宫格的二十格相关
精心设计了有效性判定函数,最多一次遍历81个小单元格就能做出方案的有效性判定。
同理设计了相关20格判定,一次0~9的循环就完成有效性判定。
用数组模拟堆栈,为搜索提供回溯信息。
利用对象具有map性质,来辅助判断方案的有效性,大大简化了算法。
只用了一个二维数组存储数独方案,一个一维数组作堆栈,一个布尔变量作回溯标识。
书上提到的难度为10.7的题目的答案,1秒内解决,效率还行。
可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。
摒除法:用数字去找单元内唯一可填空格,称为摒除法,数字可填唯一空格称为摒余解(隐性唯一解)。根据不同的作用范围,摒余解可分为下述三种:数字可填唯一空格在「宫」单元称为宫摒余解(Hidden Single in Box),这种解法称宫摒除法。数字可填唯一空格在「行」单元称为行摒余解(Hidden Single in Row),这种解法称行摒除法。数字可填唯一空格在「列」单元称为列摒余解(Hidden Single in Column),这种解法称列摒除法。行摒余解和列摒余解合称行列摒余解(Hidden Single in Line)。得到行列摒余解的方法称为行列摒除法。