public class Sudoku {
int sd[][];
public Sudoku(int sd_[][]){
sd=sd_;
}
//寻找横坐标下一位置
int findx(int x,int y){
if(y==8)
return x+1;
else
return x;
}
//寻找纵坐标下一位置
int findy(int x,int y){
if(y==8)
return 0;
else
return y+1;
}
//输出完成的数独矩阵
void sdPrint(){
for(int x = 0;x<9;x++){
for(int y = 0;y<9;y++){
System.out.print(sd[x][y]+" ");
}
System.out.print("\n");
}
System.out.print("=================="+"\n");
}
//判断当前位置是否可以放置
int canSet(int k,int x,int y){
//判断横数列有重复否
for(int i=0;i<9;i++){
if(k==sd[i][y]||k==sd[x][i])
return 0;
}
//判断3×3列有重复否
for(int j=0;j<3;j++){
for(int m=0;m<3;m++){
if(k==sd[x/3*3+j][y/3*3+m])
return 0;
}
}
return 1;
}
void searchSet(int n,int x,int y){
//判断当前位置是否能改变
if(sd[x][y]!=0){
if(n==80){
sdPrint();
return;
}
searchSet(n+1,findx(x,y),findy(x,y));
return;
}
//由9~1依次判断
for(int i=9;i>0;i--){
if(canSet(i,x,y)==1){
sd[x][y]=i;
if(n==80){
sdPrint();
return;
}
searchSet(n+1,findx(x,y),findy(x,y));
}
sd[x][y]=0;
}
}
}
构造解数独
最新推荐文章于 2021-06-12 10:21:41 发布