- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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
您可能关注的文档
- java动态代理(jdk与cglib)详细解析.doc
- java动态代理和cglib动态代理示例分享.doc
- 详解使用Java原生代理实现AOP实例.doc
- java使用动态代理来实现AOP(日志记录)的实例代码.doc
- 实例讲解Java设计模式编程中如何运用代理模式.doc
- Java设计模式之代理模式(Proxy模式)介绍.doc
- 代理模式之Java动态代理实现方法.doc
- Java编写掷骰子游戏.doc
- 保密与竞业限制协议书模板(5份).docx
- 保密与竞业限制合同书范本-5份.docx
- 班级元旦晚会策划书 班级元旦晚会策划书4篇.doc
- 班会会议记录格式及 班会会议记录(实用【7篇】.doc
- 认真学习《中国共产党纪律处分条例》PPT党的六大纪律课件.pptx
- 党纪学习教育PPT新修订的《中国共产党纪律处分条例》解读课件.pptx
- 关于严明党的纪律和规矩的重要论述PPT课件.pptx
- 2024年国九条PPT关于加强监管防范风险推动资本市场高质量发展的若干意见课件.pptx
- 2024干部一定要知敬畏存戒惧守底线PPT相关重要论述课件.pptx
- 推动经济实现质的有效提升和量的合理增长PPT学习教育课件.pptx
- 2024坚持“四步联动”做实党员教育工作PPT新时代党员教育工作课件.pptx
- 权威解读《关于加强社区工作者队伍建设的意见》PPT课件.pptx
文档评论(0)