与C#的初次接触(自己制作的解数独程序)

作者: shad0w_walker(admin) 分类: 空分类 发布时间: 2015-04-30 23:02 ė 6 3条评论

昨天下午还对c#一窍不通的我受到POJ3074(Sudoku)这道题以及前段时间研究的dancing links算法的启发,突然想用C#写一个关于解数独的程序。话不多说,我找来了凯神巨巨帮我写了一个数独的界面(凯神手速真是快的飞起),然后我把先前用C++写的数独程序“翻译”成了C#(以为很难,结果发现还好)“融合”了进去,然后开始领悟凯神写的代码(不得不仰慕我自己的地方就是,我发现我竟然领悟得很快)。从昨晚到今晚,一边找资料一边理解,算是学了点C#的皮毛。

现在让我来介绍我的解数独程序——

 

sudoku1

这是主界面,先要把未完成的数独填进去,非常方便,点击一个空格后,可以从底下的9个数字中选,也可以从键盘输入。当需要清空所有格子时,点击Reset即可。

 

sudoku2

填完数独之后(黑色的数字为未完成的数独),点击Solve,就会出解(红色的数字是算出来的数字),快的不要不要的啊!

 

sudoku3

当然有的时候也会遇到数独无解的情况。如上图

 

 

现在进入自夸模式:

这款解数独程序的卖点在哪呢?一是凯神和我精心设计的界面,二则是解数独的速度。

记得上学期用回溯法写过一个粗暴的解数独,虽然代码及思想非常简单,优化也有许多,但不可避免的是解数独速度非常缓慢——虽然简单的数独几百毫秒就能出解,但难的数独最多需要10秒才能出解!这简直是对生命的浪费。

恩,这次的程序采用了高端大气的dancing links算法,就是解数独的核心代码,先把9*9的数独建模成一个729*324的01矩阵,然后套上一个DLX精确覆盖的模板,几十毫秒已是绰绰有余,基本上算是秒解吧。

 

不足之处:

1、假如一个数独有多解,本程序只能提供一解。其实这个问题我有办法解决。。只是突然有点懒。。你打我啊~

2、当下部没有1-9的格子时,点击亦能填数字到上面。这个嘛。。不要在意这些细节啦~

 

附上程序及源代码百度网盘

下载压缩文件,Sudoku.exe即是程序文件,双击打开即可,绝对没毒!想要测试该程序的可以随便百度一个数独,只要保证有解,就肯定能解出来!

想要阅读源代码,打开文件夹用vs打开Sudoku.sln即可。版权什么的我一定是看淡了~

 

这是本人制作的第一个有图形化界面的有实际用途的程序!感觉算是写代码生涯中的一个check point

 

最后:

感谢什么都会的凯神对我的帮助(凯神带我飞啊)

感谢kuangbin巨巨的DLX模板(虽然我有写过同样功能的模板,但是太丑陋啦,还是直接盗巨巨的模板吧)

 

本文出自shad0w_walker,转载时请注明出处及相应链接。

本文永久链接: https://www.sdwalker.com/archives/184.html

3条评论

  1. Ivy_End 2015年4月30日 23:37 回复

    学弟你真厉害,第二个Bug我觉得加个flag就可以解决了。

    1. shad0w_walker(admin)
      shad0w_walker(admin) 2015年5月1日 14:01 回复

      学弟你说的好有道理!

  2. xiaoxin 2015年5月8日 14:36 回复

    仰慕啊!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

返回顶部