Java基于二维数组实现的数独问题示例
本文实例讲述了Java基于二维数组实现的数独问题。分享给大家供大家参考,具体如下:
这里利用Java二维数组实现数独问题。
(1)生成简易数独
(2)生成数独问题**
代码
importjava.util.Random; importjava.util.ArrayList; publicclassSuduku{ /** *打印二维数组,数独矩阵 */ publicstaticvoidprintArray(inta[][]) { for(inti=0;i<9;i++){ for(intj=0;j<9;j++){ System.out.print(""+a[i][j]); if(0==((j+1)%3)){ System.out.print(""); } } System.out.println(); if(0==((i+1)%3)) { System.out.println(); } } } /** *产生一个1-9的不重复长度为9的一维数组 */ publicstaticArrayListcreatNineRondomArray() { ArrayList list=newArrayList (); Randomrandom=newRandom(); for(inti=0;i<9;i++){ intrandomNum=random.nextInt(9)+1; while(true){ if(!list.contains(randomNum)){ list.add(randomNum); break; } randomNum=random.nextInt(9)+1; } } System.out.println("生成的一位数组为:"); for(Integerinteger:list){ System.out.print(""+integer.toString()); } System.out.println(); returnlist; } /** *通过一维数组和原数组生成随机的数独矩阵 * *遍历二维数组里的数据,在一维数组找到当前值的位置,并把一维数组 *当前位置加一处位置的值赋到当前二维数组中。目的就是将一维数组为 *依据,按照随机产生的顺序,将这个9个数据进行循环交换,生成一个随 *机的数独矩阵。 * */ publicstaticvoidcreatSudokuArray(int[][]seedArray,ArrayList randomList) { for(inti=0;i<9;i++){ for(intj=0;j<9;j++){ for(intk=0;k<9;k++){ if(seedArray[i][j]==randomList.get(k)) { seedArray[i][j]=randomList.get((k+1)%9); break; } } } } System.out.println("处理后的数组"); Suduku.printArray(seedArray); } publicstaticvoidcreatSudokuQuestion(int[][]a) { Randomrand=newRandom(); for(inti=0;i<9;i++){ for(intj=0;j<4;j++){ a[i][(int)rand.nextInt(9)]=0; } } Suduku.printArray(a); } // publicstaticvoidmain(String[]args){ intseedArray[][]={ {9,7,8,3,1,2,6,4,5}, {3,1,2,6,4,5,9,7,8}, {6,4,5,9,7,8,3,1,2}, {7,8,9,1,2,3,4,5,6}, {1,2,3,4,5,6,7,8,9}, {4,5,6,7,8,9,1,2,3}, {8,9,7,2,3,1,5,6,4}, {2,3,1,5,6,4,8,9,7}, {5,6,4,8,9,7,2,3,1} }; System.out.println("原始的二维数组:"); Suduku.printArray(seedArray); ArrayList randomList=Suduku.creatNineRondomArray(); Suduku.creatSudokuArray(seedArray,randomList); System.out.println("生成数独问题:"); Suduku.creatSudokuQuestion(seedArray); } }
输出:
原始的二维数组: 978312645 312645978 645978312 789123456 123456789 456789123 897231564 231564897 564897231 生成的一位数组为: 239168754 处理后的数组 157963824 963824157 824157963 571639248 639248571 248571639 715396482 396482715 482715396 生成数独问题: 057963000 963000057 024107960 501609200 609200570 208071039 715006482 306482705 482700396
更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。