java实现解数独的小程序

java实现解数独的小程序

ID:30768811

大小:95.50 KB

页数:4页

时间:2019-01-03

java实现解数独的小程序_第1页
java实现解数独的小程序_第2页
java实现解数独的小程序_第3页
java实现解数独的小程序_第4页
资源描述:

《java实现解数独的小程序》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Java实现解数独的小程序最近在学习Java,然后上个月迷上了九宫格数独,玩了几天,觉得实在有趣,就想看能不能用编程来解决,于是就自己写了个,还真解决了。下面这篇文章就给大家主要介绍了Java实现解数独的小程序,需要的朋友可以参考借鉴。前言数独相信很多人都玩过,趣味性很强,十分的耐玩。可有没有程序员想过玩实现一个数独布局的算法呢?算法是个很有意思,很神奇的东西。算法如下,需要预先给出儿个固定的值,目前解决的一个最难的数独是大概26个已知值的情况,理论上应该能解决任意已知值的数独,不过不知道会不会迭代栈溢出……因为在26个已知值的情况下就迭代了3000多次

2、了,冏~~~这是己知值:112148155161177183211226244359378384479587613668674686737764771833867934946973982(PS:如982表示第9行第二列的值是2)将上面的数字保存到num.txt文件屮,再把底下附的源代码保存为Sudoku.javao然后在cmd命令行模型下输入:javacSudoku.javajavaSudokuvnum.txt即可得到结果。这个解法是我之前看到八皇后排列问题的解法后结合应用的,在数独中采用了这种解法,不过应该算是比较暴力的拆解,所以我后面命名成viole

3、ntBreakooo虽然只是一个很小的事,但是能尝试着用编程去解决日常遇到的爭,突然觉得很开心,学以致用!java源代码:importjava」ang・System・*;importjava.util.ArrayList;importjava.util.Seanner;/**ThisclassnamedSudokucanautocalculateSudokubut*youshouldinputsomenumswhicharealreadyknown.*Forinstance:*153*247*Theretworowsmeans[1][5]=3[2][4]

4、=7*i.e.Inrow1col5isvalue:5*youcanwriteallknownnumintoonetxtfile*andinputintothisprogram.*suchasjavaSudoku建立一个9X9矩阵保存数独正确的值2^建立一个9X9列表,每个列表里保存着该位置,数独可以填入的可能值如ArrayList[2][l]={123}即1,1这个位置的数独可能可以填入其中一个当矩阵该位置已保存了正确值时,清空对应位置的ArrayList3、当列表ArrayList里只有一个可能值时,那个值

5、就是数独的正确值,将该值填入数独矩阵并更新ArrayListPS:以上算法只能用于求困难级别的数独,因为我在玩游戏的时候发现,每个时刻必定会有一个数独空位,是只能填入一个值的,所以这个算法才能运行当一个数独(即已知位置的值变少时),可能会出现所有的空位都最起码有两个值吋,需要改进算法,通过代入来判断这个数独是否成立4、于是后期我加入了暴力破解法,在上面的步骤执行后无法得出数独,即使用暴力破解**/publicclassSudoku{〃弄十的原因是为了好记忆,0,0不用,只用1・9的listprivateArrayList[][]avai

6、lableNum=newArrayList[10][10];privateint[][]correctNum=newint[10][10];privateSeannerscan=newSeanner(System.in);privateintcountNum=0;{for(inti=0;i<10;i卄){for(intj=0;j<10;j卄){availableNum[i][j]=newArrayList<>();}}for(introw=1;row<10;row++){forfintcol=l;col<10;col卄){for(inti=l;i<10;

7、i++)availableNum[row][col].add(newInteger(i));}}〃先都初始化为・1,即此时没有填充数字for(inti=0;i<10;i++)for(intj=0;j<10;j++)correctNum[i][j]=-l;}publicSudoku(){}〃在对应数独位置插入正确值publicvoidinsert(introw,intcol,intvalue){correctNum[row][col]=value;availableNum[row][col]=null;delete(row,col,value);}〃每插入

8、一个数值,就删除相应的行列和小框框3X3数独里对应的ArrayList里可能的该

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。