数独算法(java实现)

主要思想
首先在第一排随即排列九个不一样得数。
然后在其他后面就用回溯法,值从1嫁到9,对了就前进,不对就继续,如果都试了一下还是不成功就后退。
废话不多说

import java.util.Random;


class shuZi {
	int [][]qiBan=new int[9][9];
	/*初始化函数*/
	public shuZi(){
		
		for(int i=0;i<9;i++){
			for(int j=0;j<9;j++){
				qiBan[i][j]=0;
			}
		}
		/*第一排随机放数字*/
qiBan[0][suiji()]=1;for(int i=2;i<10;i++){int a=suiji();while(qiBan[0][a]!=0){a=suiji();}qiBan[0][a]=i;}/*从第二排开始试点发*/int x=1,y=0;do{qiBan[x][y]++;/*如果没成功就每次加1,加到9,还是不行就要回退*/if(qiBan[x][y]==10){qiBan[x][y]=0;/*变成零*/y--;if(y<0){/*如果负一的话就要重新换一排*/x--;y=8;}continue;}/*如果成功Y就加一*/if(yanZheng(x,y,qiBan[x][y])){y++;if(y==9){x++;y=0;};//如果横排试完就要加1}}while(x<9);}public void show(){//输出数组for(int i=0;i<9;i++){for(int j=0;j<9;j++){System.out.print(qiBan[i][j]);if(j==8) System.out.println("");}}}private int suiji(){//随即算法Random random = new Random();random.nextInt(20);return random.nextInt(9);}private Boolean yanZheng(int x,int y,int value){//验证算法for(int i=0;i<9;i++){if(i==y) continue;if(qiBan[x][i]==value) return false; //检查竖排}for(int i=0;i<9;i++){if(i==x) continue;if(qiBan[i][y]==value) return false; //检查横排}int n=x/3;//在那个横排九宫格int m=y/3;//在那个竖排九宫格for(int i=n*3;i<3*(n+1);i++){for(int j=m*3;j<3*(m+1);j++){if(x==i&&y==j) continue;if(qiBan[i][j]==value) return false;}}return true;}}
 
  

你可能感兴趣的:(数独算法(java实现))