Java实现解数独的小程序.docVIP

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java实现解数独的小程序 最近在学习Java,然后上个月迷上了九宫格数独,玩了几天,觉得实在有趣,就想着能不能用编程来解决,于是就自己写了个,还真解决了。下面这篇文章就给大家主要介绍了Java实现解数独的小程序,需要的朋友可以参考借鉴。 前言 数独相信很多人都玩过,趣味性很强,十分的耐玩。可有没有程序员想过玩实现一个数独布局的算法呢?算法是个很有意思,很神奇的东西。 算法如下,需要预先给出几个固定的值,目前解决的一个最难的数独是大概26个已知值的情况,理论上应该能解决任意已知值的数独,不过不知道会不会迭代栈溢出……因为在26个已知值的情况下就迭代了3000多次了,囧~~~ 这是已知值: 1 1 21 4 8 1 5 51 6 11 7 71 8 32 1 12 2 62 4 43 5 93 7 83 8 44 7 95 8 76 1 36 6 86 7 46 8 67 3 77 6 47 7 18 3 38 6 79 3 49 4 69 7 39 8 2 (PS:如9 8 2表示第9行第二列的值是2) 将上面的数字保存到num.txt文件中,再把底下附的源代码保存为Sudoku.java。 然后在cmd命令行模型下输入: javac Sudoku.java java Sudoku <num.txt 即可得到结果。 这个解法是我之前看到八皇后排列问题的解法后结合应用的,在数独中采用了这种解法,不过应该算是比较暴力的拆解,所以我后面命名成violentBreak。。。 虽然只是一个很小的事,但是能尝试着用编程去解决日常遇到的事,突然觉得很开心,学以致用! java源代码: import java.lang.System.*; import java.util.ArrayList; import java.util.Scanner; /**This class named Sudoku can auto calculate Sudoku but *you should input some nums which are already known. *For instance: *1 5 3 *2 4 7 *There two rows means [1][5]=3 [2][4]=7 *i.e. In row 1 col 5 is value:5 *you can write all known num into one txt file *and input into this program . *such as java Sudoku < num.txt */ /**代码逻辑解析: * 1、建立一个9X9矩阵保存数独正确的值 2、建立一个9X9列表,每个列表里保存着该位置,数独可以填入的可能值 如ArrayList[1][1]={1,2,3}即1,1这个位置的数独可能可以填入其中一个 当矩阵该位置已保存了正确值时,清空对应位置的ArrayList 3、当列表ArrayList里只有一个可能值时,那个值就是数独的正确值,将该值填入数独矩阵 并更新ArrayList PS:以上算法只能用于求困难级别的数独,因为我在玩游戏的时候发现,每个时刻必定会有 一个数独空位,是只能填入一个值的,所以这个算法才能运行 当一个数独(即已知位置的值变少时),可能会出现所有的空位都最起码有两个值时, 需要改进算法,通过代入来判断这个数独是否成立 4、于是后期我加入了暴力破解法,在上面的步骤执行后无法得出数独,即使用暴力破解 * */ public class Sudoku{ //弄十的原因是为了好记忆,0,0不用,只用1-9的list private ArrayList<Integer>[][] availableNum=new ArrayList[10][10]; private int[][] correctNum=new int[10][10]; private Scanner scan=new Scanner(System.in); private int countNum=0; { for(int i=0;i<10;i++){ for(int j=0;j<10;j++){ availableNum[i][j]=new ArrayList<>(); } } for(int row=1;row<10;row++){ for(int col=1;col<10;col++){ for(int i=1;i<10;i++) avai

文档评论(0)

visa158 + 关注
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档