【java练习】生成一张数独表吧!
来源:互联网 发布:淘宝集运德国 编辑:程序博客网 时间:2024/05/31 06:23
练习
随机生成一张数独表练习。反正看起来效率不高就是了=A=。。。
总体思想就是一行一行的随机。一行中随机出一个数判断一下这行有没有;开始下一行之前判断这行有没有和上面的行形成的列有没有重复的,有的话重新随机上一行,以及3*3格子里有没有一样的。
package dome; //数独9x9public class num_only { public static void main(String[] args) { boolean Sw=true; while(Sw) { int[][] number=new int[9][9]; for(int i=0;i<number.length;i++) { for(int j=0;j<number.length;j++) { number[i][j]=(int)(Math.random()*9+1); for(int j_=j-1;j_>=0;j_--) { //判断行 if(number[i][j]==number[i][j_]) { j--; break; } } } for(int jj=0;jj<number.length;jj++) { //判断列 for(int i_=i-1;i_>=0;i_--) { if(number[i][jj]==number[i_][jj]) { i--; break; } } } //i=036 随便,i=147不能等于上一行,i=259不能等于上两行 3x3 if(i%3==1) { for(int jj=0;jj<number.length;jj=jj+3) { int[][] i2=threethree(number,(i-1),jj,2,3); //判断i2数组中是否有一样的 if(DifferenceArrays(i2)==false) { i--; break; } } }else if(i%3==2) { for(int jj=0;jj<number.length;jj=jj+3) { int[][] i2=threethree(number,(i-2),jj,3,3); if(DifferenceArrays(i2)==false) { i--; break; } } } } //花哨的打印出来_(:з」∠)_ System.out.println("—————————————————————————————————————"); for(int i=0;i<number.length;i++) { for(int j=0;j<number.length;j++) { if(j==0) { System.out.print("| "); } System.out.print(number[i][j]+" | "); } System.out.println(); System.out.println("—————————————————————————————————————"); } //System.out.println(Arrays.toString(number)); Sw=false; } } //复制二维数组 public static int[][] threethree(int[][] a,int i,int j,int i_,int j_) { int[][] b=new int[i_][j_]; int temp=j; for(int ii=0;ii<i_;ii++) { j=temp; for(int jj=0;jj<j_;jj++) { b[ii][jj]=a[i][j]; j++; } i++; } return b; } //判断一个二维数组里有没有重复的数字 有false 没有true public static boolean DifferenceArrays(int[][] a) { boolean b=true; outer:for(int i=0;i<a.length;i++) { for(int j=0;j<a[i].length;j++) { for(int ii=0;ii<a.length;ii++) { for(int jj=0;jj<a[i].length;jj++) { if(ii==i&&jj==j) { continue; } if(a[i][j]==a[ii][jj]) { b=false ; break outer; } } } } } return b; }}
测试结果:
查了下资料发现数独挖坑还是很有讲究的,随便挖空的话解还不一定是唯一的。闲了再认真想想好了=_=
阅读全文
0 0
- 【java练习】生成一张数独表吧!
- java生成一张图片
- JFreeChart_生成一张图片
- Qt 生成一张图片
- iOS -- 生成一张Image
- 将一张图片生成二进制文件
- 一张Java学习路线图
- 一张Java学习路线图
- 一张图解决java
- java 复制一张图片
- java练习——符号生成图形1
- java练习——符号生成图形2
- 用一个颜色值生成一张图片
- 一张图理解java注解
- 一张图读懂Java多线程
- 一张图读懂Java多线程
- 一张图诠释Java集合
- 一张图读懂java多线程
- 欢迎使用CSDN-markdown编辑器
- Makefile学习笔记2
- Android TextView属性大全
- n-皇后问题 算法代码
- 每日一题#10-22 Ransomware
- 【java练习】生成一张数独表吧!
- 自考总结
- 文章标题
- java对象序列化(一)
- java static关键字
- 一个判断long类型的数是否为回文数算法的C++代码
- 仿Zepto自动触发事件函数---trigger()
- 基于Tensorflow的机器学习(4) -- 随机森林
- 拼图实现简单译码器与加法器