用程序解九宫格数独

来源:互联网 发布:seo黑链代码 编辑:程序博客网 时间:2024/06/08 19:06

关于给定不完整数独的解有三种情况:

1,数独中的数字有冲突,无解。

2,数独中的数字没有冲突,并且有且只有一个解。

3,数独中的数字没有冲突,有多个解。


以上三种情况是得到不完整数独的解,所面对的情况。


1,1 设想一个不完整的数独有冲突数字。在进行填数字前,就要判断出来。然后报告这个数独有冲突数字。

2,2 设想一个不完整的数数独有唯一数独解,那么每一个格中的数字都是唯一确定的。只是我们不知道是具体数值。那么我们就可以先找出这种唯一确定的数字啦。

3,3设想一个不完整的数独有多个解,那么可以先找出唯一确定的那些数字位置。然后剩下的空方格就有多种情况了。



其中数独有多少种可能呢? 如果是9x9的格式,则有十的八十一次方中可能数独(含有冲突项)。


难度第一简单思路:

所以使用暴力的方式进行一一列举,尝试得到一个不完整数独的解,似乎不太可能。于是,猜想应该排除有冲突的数独。


难度第二简单思路:

这时,思路有了。当尝试向数独中填入一个数字X(随便取的一个变量名)时,要判断X不与已经存在的数字重复(冲突)。

其中以上的数字重复包括,X所在的行不重复,X所在的列不重复,X所在的小九宫格不重复。然后再尝试下一个数字的填入。这种思路可以得到数独的解,仔细像,好像存在漏洞。填入数字有可能重复。没有排除已存在项(具体操作有点麻烦,不建议用递归实现(内存占用过多))。


难度第三简单思路:

这是由2.2的说明可知,可以优先填入这种唯一确定的数字空格。当然上一次的填入会对当前这次的填入产生影响。这就促进了当前这一次的填入。如此循环填入唯一确定数字,就可以将所有的唯一确定值填完了。如果此时数独已经填完整了,那么这就是一个唯一确定的数独。否则就是一个多种解数独。



补充:如果是多解数独那么可以参照难度第二简单思路得到一个完整数独。



关于以上思路程序(window版 android版)上传到了taocode平台上。http://code.taobao.org/svn/shudu_programe/ 或者 http://code.taobao.org/p/shudu_programe/wiki/index/





原创粉丝点击