知识大全 数独求解算法
Posted 软件
篇首语:志高品高,志下品下。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 数独求解算法相关的知识,希望对你有一定的参考价值。
在上海乘坐地铁的朋友都知道 上海地铁站免费赠阅的时代报上 经常会刊登有数独这个益智游戏 如果用纸和笔人工去算的话 恐怕你要花上老半天功夫了 有时候还不一定能解出来 心中一定很郁闷吧?网上也有一些数独游戏的求解计算器 不过我想与其直接拿来主义 还不如自己研究编一个呢!所以 花了大概有一个多月的时间来编写了这样一个数独求解软件 由于不是利用所谓的穷举算法 所以如果数独游戏非唯一解的话 它就只提供最先找到的那个解 不过 请放心 肯定是正确的!下面我就来详述一下这个算法的精要
定义一个类 代表数独游戏中的每一个数 它有如下属性 #region 属性 /// <summary> /// 数值 /// </summary> public int Num set if (UnFilled) _num = value; _unfilled = false; Choices Clear(); SetNumEvent(this); get return _num; /// <summary> /// 行坐标 /// </summary> public int Xpos set _x = value; get return _x; /// <summary> /// 列坐标 /// </summary> public int Ypos set _y = value; get return _y; /// <summary> /// 是否已填充的标记 /// </summary> public bool UnFilled get return _unfilled; /// <summary> /// 候选数列表 /// </summary> public List<int> Choices set _choices = value; get return _choices; #endregion
在求解的主类里 根据游戏的规则 设计这样一套算法 当某一个数值被设定以后 与它同行或同列的以及在同一个九宫里的数的候选数列里都要去掉这个数本身 数独游戏中出现的数为已知数 需要我们填补的则是未知数 未知数需要我们去试解 不过在试解之前先要备份初始化以后的数组矩阵 以备在前一次试解失败以后进行恢复再进行下一次试解 直到试解成功为止
算法本身看上去不是太复杂 但是涉及到一个遍历和回滚的问题 所以 在编程的时候还是要注意一下的
下面我就来简单介绍一下这个数独求解软件的操作和使用方法
软件总体来说还是操作比较简单的 但是由于当时编写的时候只是想给自己用的 所以并没有设计菜单和帮助文档 用户在输入初始数据的时候可以用上下左右方向键或者ASDF来进行跳格 如果数错了 在按确定按钮以前可以按Back Space或Delete键进行修改 一旦按了确定按钮 就只得按F 清空后重新输入了
软件下载地址
源码下载地址
cha138/Article/program/net/201311/13980相关参考
今年宁波数独锦标赛什么时候比赛?在哪里比?求尽快告知!中国数独锦标赛初赛(宁波赛区)将于2016年7月31日下午13:30—17:00在宁波3C教育举办。河南武术锦标赛什么时候比赛8月8日上午,200
算法分析.评价算法好坏的标准 求解同一计算问题可能有许多不同的算法究竟如何来评价这些算法的好坏以便从中选出较好的算法呢? 选用的算法首先应该是正确的此外主要考虑如下三点①执行算法所耗费的时间②执行
算法分析 评价算法好坏的标准 求解同一计算问题可能有许多不同的算法究竟如何来评价这些算法的好坏以便从中选出较好的算法呢? 选用的算法首先应该是正确的此外主要考虑如下三点 ①执行算法所耗费的
虽然设计一个好的求解算法更像是一门艺术而不像是技术但仍然存在一些行之有效的能够用于解决许多问题的算法设计方法你可以使用这些方法来设计算法并观察这些算法是如何工作的一般情况下为了获得较好的性能必须对
()渐进时间复杂度评价算法时间性能 主要用算法时间复杂度的数量级(即算法的渐近时间复杂度)评价一个算法的时间性能 【例】有两个算法A和A求解同一问题时间复杂度分别是T(n)=nT(n)=n
在例及中已考察过这个问题因为具有n个顶点的无向网络G的每个生成树刚好具有n条边所以问题是用某种方法选择n条边使它们形成G的最小生成树至少可以采用三种不同的贪婪策略来选择这n条边这三种求解最小生成树
第四章栈和队列 本章介绍了栈的定义以及栈的基本操作的实现特别介绍了栈与递归的关系以及栈和递归在问题求解中的作用本章还介绍了队列的定义队列的存储桔构队列基本操作的实现特别介绍了循环队列及其应用以及其它
出栈序列的求解算法文献[]给出两种算法第一种是传统的解法简称算法其实现思想描述如下 )求…n的一个全排列alaa…an )判断alaa…an是否为出栈序列若是则输出 )若
算法和算法分析 AlgorithmsandAlgorithmAnalysis 算法 所谓算法(Algorithm)是对问题求解步骤的一种描述是指令的有限序列其中每一条指令表示一个或多个操作在
> 图静态链表 静态链表在算法设计中也有比较广泛的应用如前面所述的用顺序表求解约瑟夫问题其每次出列都必须删除这个元素我们知道顺序表删除元素需移动大量元素利用静态链表的思想来求解约瑟夫问题时可以