Fork me on GitHub

05 2012 档案

摘要:上两篇用C#写了数独构造与求解的程序,不过我还是喜欢用C++实现,所以又将程序用C++实现了一下,至于方法什么的就不再重复了,见上两篇博文 一下是程序的一些关键代码 将每一小格抽象为一个对象: Cell.h#ifndef GUARD_Cell_h#define GUARD_Cell_h#include "Coord.h"#include <list>class Cell{ public: Cell(int x=0,int y=0); bool IsProcessed() const; int X() const; int ... 阅读全文
posted @ 2012-05-11 21:21 _Lei 阅读(3267) 评论(1) 推荐(1)
摘要:上一篇讲了怎么构造数独,这一节讲怎么对一个被挖掉一些格子的数独矩阵(如以下矩阵)进行求解,用的是回溯法。 (1)用程序求解:构造数独矩阵,随机挖掉一些空格的时候,要记录下这些空格的坐标,我们在Table类中用一个链表储存这些坐标。因为储存的这些坐标是随机产生的,所以求解之前最后排下序(排序时可以将Coord坐标类实现IComparable接口,将坐标按X,Y进行二级排序),这样回溯起来效率会快很多。依次取出链表中的坐标,往坐标的格子依次填入1~9,然后分别在行、列、3*3的小表格中检验,如果通过则继续取链表中下一个坐标,再重复一下过程,如果不能通过则回溯。核心代码: p... 阅读全文
posted @ 2012-05-10 23:22 _Lei 阅读(3627) 评论(0) 推荐(0)
摘要:其实一直都很想写个数独的游戏,最近刚好看了《编程之美》,得到了一些启发。 好,这时第一节,构造数独矩阵。主要用到深度搜索算法,先往下一个格子填数字(依次填入1~9),在9*9表格的行中检验数字有没有出现过,在9*9表格的列中检验数字有没有出现过,最后在3*3的表格中检验数字是否出现过。如果最后1~9中所有的数字都不符合,则开始回溯。重复以上过程,最终我们可以得到一个数独矩阵。核心代码: //得到一个数独矩阵 public bool GenerateValidMatrix() { //初始化之后坐标为(0,0) Coo... 阅读全文
posted @ 2012-05-08 18:54 _Lei 阅读(6943) 评论(2) 推荐(1)