求数独的编程思想
1个回答
展开全部
我用EXCEL的宏编过,但是算法不太好,简单得可以作出,难得的就不行了
想法如下:
建立一个X(a,b,c,d)的列阵,4个数为(1,2,3)中的一个
a,b表示大的33阵(就是你所说的"区")的位置
c,d表示在特定33阵(特定"区")中的位置
那么每个特定的X表示特定的空格位置
每个X初始都=123456789
X的值表示这个空格可能取的数
然后已经给出的条件的X改为条件给出的数
现在我虽然不知道剩下的空格是哪个数,但是我可以知道特定的空格中不可以是哪个数(按规则)
step1
所以分别检查每个空格
将不可能出现的数字从123456789中删去(比如这个区已经存在1,4,5那么我们把区中其他的空格的1,4,5去掉,变成2,3,6,7,8,9)
这样X的位数就越来越小了
当X的长度等于1的时候那么这个空格就是唯一的了
step2
检查每一个区中的9个数中含有几个1,如果只有1个,那么含有1的哪个空格就是1了,(1-9,依次检验),(行或者列也要分别检验)
step3
检查是不是每个数都小于10,如果不是
检查经过step1和step2后,各个数字有没有变化,如果有,那么重复step1,step2.没有的话(说明按刚刚的步骤只能解到这样了)结束循环
我编的只是为了方便帮我解题,太难的做不出,但是用的话可以解出很多数了,人在看一下,很快就解出了
如果一定要编到底的话,我也想过
然后在X中寻找1个2位数,假定2位数中的一个是正确的,然后在按刚刚的步骤,如果结果有矛盾则就是另一个数
希望对你有帮助
想法如下:
建立一个X(a,b,c,d)的列阵,4个数为(1,2,3)中的一个
a,b表示大的33阵(就是你所说的"区")的位置
c,d表示在特定33阵(特定"区")中的位置
那么每个特定的X表示特定的空格位置
每个X初始都=123456789
X的值表示这个空格可能取的数
然后已经给出的条件的X改为条件给出的数
现在我虽然不知道剩下的空格是哪个数,但是我可以知道特定的空格中不可以是哪个数(按规则)
step1
所以分别检查每个空格
将不可能出现的数字从123456789中删去(比如这个区已经存在1,4,5那么我们把区中其他的空格的1,4,5去掉,变成2,3,6,7,8,9)
这样X的位数就越来越小了
当X的长度等于1的时候那么这个空格就是唯一的了
step2
检查每一个区中的9个数中含有几个1,如果只有1个,那么含有1的哪个空格就是1了,(1-9,依次检验),(行或者列也要分别检验)
step3
检查是不是每个数都小于10,如果不是
检查经过step1和step2后,各个数字有没有变化,如果有,那么重复step1,step2.没有的话(说明按刚刚的步骤只能解到这样了)结束循环
我编的只是为了方便帮我解题,太难的做不出,但是用的话可以解出很多数了,人在看一下,很快就解出了
如果一定要编到底的话,我也想过
然后在X中寻找1个2位数,假定2位数中的一个是正确的,然后在按刚刚的步骤,如果结果有矛盾则就是另一个数
希望对你有帮助
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询