标签:
构造一个9*9的方格矩阵,玩家要在每个方格中,分别填上1至9的任意一个数字,让整个棋盘每一列、每一行以及每一个3*3的小矩阵中的数字都不重复。
用转置的方法生成数独数组,代码如下:
1 package chapter1youxizhileShuDu; 2 3 import java.util.Random; 4 5 /** 6 * 用置换法生成数独矩阵 7 * @author DELL 8 * 9 */ 10 public class ShuDu { 11 private int a[]; //存放随机生成的1-9的数组 12 public ShuDu(){ 13 a = new int[9]; 14 randomArr(); 15 juzhen(); 16 } 17 /** 18 * 随机生成1-9的数组 19 */ 20 public void randomArr(){ 21 Random r = new Random(); 22 int x = 1+r.nextInt(9); 23 a[0]=x; 24 for(int i=1;i<9;i++){ 25 x = 1+r.nextInt(9); 26 for(int j=0;j<a.length;j++){ 27 if(a[j]==x){ 28 x = 1+r.nextInt(9); 29 j=-1; 30 } 31 } 32 a[i] = x; 33 } 34 } 35 //通过转置为矩阵赋值 36 public void juzhen(){ 37 int b[][]; //存放矩阵的数组 38 b = new int[9][9]; 39 int i,j; 40 //为中间的3x3矩阵赋值 41 for(i=0;i<3;i++){ 42 for(j=0;j<3;j++){ 43 b[i+3][j+3]=a[i*3+j]; 44 } 45 } 46 //为中间左边的3x3矩阵赋值 47 for(i=0;i<3;i++){ 48 b[3][i] = b[5][3+i]; 49 b[4][i] = b[3][3+i]; 50 b[5][i] = b[4][3+i]; 51 } 52 //为中间右边的3x3矩阵赋值 53 for(i=0;i<3;i++){ 54 b[3][i+6]=b[4][3+i]; 55 b[4][i+6]=b[5][3+i]; 56 b[5][i+6]=b[3][3+i]; 57 } 58 //为中间上边的3x3矩阵赋值 59 for(i=0;i<3;i++){ 60 b[i][3]=b[i+3][5]; 61 b[i][4]=b[i+3][3]; 62 b[i][5]=b[i+3][4]; 63 } 64 //为中间下边的3x3矩阵赋值 65 for(i=0;i<3;i++){ 66 b[i+6][3]=b[i+3][4]; 67 b[i+6][4]=b[i+3][5]; 68 b[i+6][5]=b[i+3][3]; 69 } 70 //为左上角的3x3矩阵赋值 71 for(i=0;i<3;i++){ 72 b[0][i]=b[2][i+3]; 73 b[1][i]=b[0][i+3]; 74 b[2][i]=b[1][i+3]; 75 } 76 //为右上角的3x3矩阵赋值 77 for(i=0;i<3;i++){ 78 b[0][i+6]=b[1][i+3]; 79 b[1][i+6]=b[2][i+3]; 80 b[2][i+6]=b[0][i+3]; 81 } 82 //为左下角的3x3矩阵赋值 83 for(i=0;i<3;i++){ 84 b[6][i]=b[8][i+3]; 85 b[7][i]=b[6][i+3]; 86 b[8][i]=b[7][i+3]; 87 } 88 //为右下角的3x3矩阵赋值 89 for(i=0;i<3;i++){ 90 b[6][i+6]=b[7][i+3]; 91 b[7][i+6]=b[8][i+3]; 92 b[8][i+6]=b[6][i+3]; 93 } 94 System.out.println("随机生成的数独矩阵为:"); 95 for(i=0;i<9;i++){ 96 for(j=0;j<9;j++){ 97 System.out.print(b[i][j]+" "); 98 } 99 System.out.println(); 100 } 101 } 102 103 public static void main(String[] args) { 104 new ShuDu(); 105 106 } 107 108 }
程序运行结果如下:
随机生成的数独矩阵为:
4 5 7 6 2 3 9 1 8
6 2 3 9 1 8 4 5 7
9 1 8 4 5 7 6 2 3
5 7 4 2 3 6 1 8 9
2 3 6 1 8 9 5 7 4
1 8 9 5 7 4 2 3 6
7 4 5 3 6 2 8 9 1
3 6 2 8 9 1 7 4 5
8 9 1 7 4 5 3 6 2
标签:
原文地址:http://www.cnblogs.com/gaopeng527/p/4611497.html