注册本站  论坛  繁體中文

电脑技巧
手机 | MP3 | MP4 | 显卡 | 主板 | 显示器 | 光存储 | 笔记本 | 网络设备 | 移动存储 | 数码相机
键鼠 | CPU | 音箱 | GPS | 电视 | 服务器 | 投影机 | 机箱电源 | 品牌电脑 | 办公打印 |
| 网站首页 | Cisco | Windows | Linux | Java | Dotnet | Oracle | 网页设计 | 平面设计 | 安全 | 软件应用 | 电脑维修 | 办公维修 |
您现在的位置: 电脑技巧 >> Dotnet >> ASP.NET >> Dotnet正文

数独求解算法

文章来源:blog.csdn.net 作者:佚名 更新时间:2008-6-28 20:39:39 【 】 【加入收藏

        在上海乘坐地铁的朋友都知道,上海地铁站免费赠阅的时代报上,经常会刊登有数独这个益智游戏。如果用纸和笔人工去算的话,恐怕你要花上老半天功夫了,有时候还不一定能解出来,心中一定很郁闷吧?网上也有一些数独游戏的求解计算器,不过我想与其直接拿来主义,还不如自己研究编一个呢!所以,花了大概有一个多月的时间来编写了这样一个数独求解软件。由于不是利用所谓的穷举算法,所以如果数独游戏非唯一解的话,它就只提供最先找到的那个解。不过,请放心,肯定是正确的!下面我就来详述一下这个算法的精要。

        1、定义一个类,代表数独游戏中的每一个数。它有如下属性:

         #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

  2、在求解的主类里,根据游戏的规则,设计这样一套算法。当某一个数值被设定以后,与它同行或同列的以及在同一个九宫里的数的候选数列里都要去掉这个数本身。数独游戏中出现的数为已知数,需要我们填补的则是未知数。未知数需要我们去试解,不过在试解之前先要备份初始化以后的数组矩阵,以备在前一次试解失败以后进行恢复再进行下一次试解,直到试解成功为止。

  3、算法本身看上去不是太复杂,但是涉及到一个遍历和回滚的问题。所以,在编程的时候还是要注意一下的。

  下面我就来简单介绍一下这个数独求解软件的操作和使用方法:

  软件总体来说还是操作比较简单的,但是由于当时编写的时候只是想给自己用的,所以并没有设计菜单和帮助文档。用户在输入初始数据的时候可以用上下左右方向键或者ASDF来进行跳格。如果数错了,在按确定按钮以前可以按Back Space或Delete键进行修改;一旦按了确定按钮,就只得按F5清空后重新输入了。

  软件下载地址:http://download.csdn.net/source/512093

  源码下载地址:http://download.csdn.net/source/512102

  下载所要的资源分可能是高了点,不过绝对是原创作品,前后花了一个多月才完成的。本人自我感觉应该是物有所值的,谢谢大家支持原创作品!

  • 上一篇Dotnet:

  • 下一篇Dotnet:
  • 最 新 热 门
     web.config配置文件中的 元素
     为网站添加业务层
     用SqlDataSource实现DataList嵌套DataList
     Visual Studio 2003插件的编写
     千条DOS命令收藏
     IIS 常见问题
     IIS需要的最小NTFS权限
     优化 .NET的性能
     设计模式与VB .net代码 外观模式,合成模式
     VB.net中介者模式
    最 新 推 荐
     总结必须学习的10项.NET技术
     asp.net+C#实现文件上传实现代码
     AlwaysVisibleControl控件的使用方法
     asp.net中的WebApplication和WebSite使用技…
     ShowModalDialog数据缓存的清除方法
     LinkButton的数据绑定问题
     数独求解算法
     Excel导出时数据中有特殊字符的可能会出错
     数据加密
     ASP.NET 2.0中连接字符串的设置
    相 关 文 章

    求解在SQL中使用了where列所遇到的问题

    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告

     

    Copyright 2006-2008 pcjx.com All Rights Reserved
    电脑技巧 版权所有 粤ICP备06059145号 地图
    本网站所有内容未经许可不得转载或做其他使用