前言
业余闲暇时,把若干年前还是开发小白时写的数独解题算法拿出来整理一下,顺带做些优化,并在此做些分享。
数独有多种,这里只说9乘9的数独,来看本篇幅的人相信都知道怎么玩。
话不多说,先上图,UI简洁明了。
功能描述
本程序基于.netframework使用C#语言开发,实现功能:
1、随机出题(New);
2、一键解题(Compute);
3、输入的合法性校验;
思路分享
说一下开发步骤及思路:
1、验证合法性判断:
根据游戏规则,验证9乘9单元格中的所有非空单元格里的数字是否有违背规则。将此封装成一个函数,传入一个9乘9的二维数组,验证成功则返回true,否则返回false。此算法的实现方式可能千人千变,考验的是小学数学功底,不难。用此算法可判断数独题是否有解。
2、解题思路简述:
依次遍历数独题中的每个空缺位置,从数字1开始尝试填写,每尝试一次,调用一次步骤1的算法。若返回true,则跳到下一个空缺位置,再次从数字1开始尝试填写;若返回false,则用当前尝试的数字+1,再次调用步骤1的算法。如果从1一直尝试到9,都是false,那么说明上一个空缺的位置填错了,需要返回上一个空缺再次尝试+1。这里是一个递归调用,略微有些烧脑,很适合编码新手练习逻辑思维。依次往后计算,直到最后一个空缺填完并返回true,这道数独题就完成了。(说明:当一道数独题有多个解时,我们可以据此算法把所有解都计算出来)
3、随机出题思路:
在9乘9单元格的随机某一行(可以就取第一行)里,和随机某一列(可以就取第一列)里,随机填写1~9的数字(前提是符合数独规则)。然后调用解题算法,将此数独计算出来。然后从完整无缺的数独结果中,随机取其中的若干(限定范围内的随机个数)个数字作为数独题目即可。取出的数字的数量越多,题目越容易,反之越难。
4、UI控制:
动态加载控件,数字颜色控制(原题数字和解题数字颜色各异),单元格按键合法性控制,支持上下左右切换单元格。
源码下载
下载源码:https://download.csdn.net/download/hyq106/31154284
欢迎沟通交流。(提醒:源码是winform版的,下载后可联系本人赠送wpf版源码)