数独求解算法
在上海坐地铁的朋友都知道,时报上经常刊登解谜游戏Sudoku,上海地铁站免费。如果用纸笔手工计算,恐怕要花很长时间,有时还不一定能解决。一定很郁闷吧?网上也有一些解决数独游戏的计算器,但是我觉得自己研究编译一个总比直接拿着好!于是花了大概一个月的时间,写了这样一个数独求解软件。因为它没有使用所谓的穷举算法,如果数独游戏不是唯一解,它只会提供第一个解,但是请放心一定是正确的!我来阐述一下这个算法的精髓。
定义一个表示数独中每个数字的类。它具有以下属性#region attribute//
根据要求解的主类中的游戏规则设计这样一个算法。当某个数字被设定时,它应该从同一第九宫的候选数字系列中删除。数独中出现的数字是已知数字,我们需要填写的是未知数字。但是我们需要尝试求解,但是在尝试求解之前,必须对初始化后的数组矩阵进行备份,以便在前一次尝试失败后恢复,然后再次尝试求解,直到下一次尝试成功。
算法本身看起来并不太复杂,但是涉及到一个遍历和回滚的问题,编程的时候要注意。
下面我简单介绍一下这个数独解数软件的操作和使用方法。
总的来说软件的操作比较简单,但是因为当时只写给个人使用,所以没有设计菜单和帮助文档。当输入初始数据时,用户可以使用上下左右箭头键或ASDF跳过空格。如果号码有误,可以先按Back Space或Delete键修改,再按OK键。一旦你按下确定按钮,你必须按F清除它并重新输入。
软件下载地址
源代码下载地址
Lishi Xinzhi/Article/program/net/201311/13980