具体数独游戏是什么,我就不介绍了,好像多余了,你能来看这篇文章,说明你对数独游戏已经有了相当的了解了!还是入正题吧,今天先讲解和发下用回溯+剪枝 求数独游戏,我也看了些回溯+剪枝求数独的算法,很恼火,既没注释,而且算法没有通用性。
今天我给大家讲的回溯+剪枝法,不仅可以用于解决数独问题,而且还可以方便用于其他难题。
先介绍回溯+剪枝法吧:回溯+剪枝
可以这样说 回溯+剪枝 法是解决一般性难题的很好的方法,当然如果难题的规模太大的话,计算机内存和运行时间,可能就超出你的范围了。
回溯法就是在问题的解空间中搜索满足条件的解。
要使用回溯法:需理解三个问题(我的理解)
1、怎样构造解空间
2、在什么条件下回,即剪枝的条件
3、回到哪个节点
在类CGrid中定义静态函数如下
static BOOL IsSingleInRow(int num,int row,int grid[9][9]);
//判断数num 在行row 中是否唯一
static BOOL IsSingleInColumn(int num, int colunm, int grid[9][9]);
//判断数num 在列column 中是否唯一
static BOOL IsSingleGongge(int num,int row,int column,int grid[9][9]);
//判断数num 在行row ,列column所在的子宫格中是否唯一
上面的几个函数,非常非常的简单,即不写了,但在函数GetAllResult中 会被用到
下面主要看GetAllResult是怎么写的哦,这个函数是要求出所有的解哦,并存在filename指定的文件中
static BOOL GetAllResult(int grid[][9], CString filename);//filename 用于存储所有的结果
对了,还有个结构体