public class Sodoku {
public static final int DIMENSION =9;
public static void main(String[] args){
int[][] tablero= new int[][] {
{0,7,0, 0,0,0, 0,8,0},
{0,5,0, 6,0,0, 0,0,1},
{0,0,3, 1,4,0, 0,0,0},
{9,0,6, 0,5,0, 3,0,0},
{0,0,0, 0,0,0, 0,0,0},
{0,0,5, 0,2,0, 1,0,7},
{0,0,0, 0,6,5, 7,0,0},
{3,0,0, 0,0,1, 9,2,0},
{0,4,0, 0,0,0, 0,1,0},
};
imprimir(tablero);
if(!resolver(tablero)){
System.out.println("El
Sudoku no tiene solución");
}else{
}
}
public static void imprimir(int[][] tablero){
for(int i=0;i<DIMENSION;i++){
if(i%3==0){
System.out.println();
}
for(int j=0; j<DIMENSION;j++){
if(j%3==0){
System.out.print(" ");
}
System.out.print(tablero[i][j]);
}
System.out.println();
}
}
public static boolean resolver(int[][] tablero){
for(int i=0; i<DIMENSION; i++){
for(int j=0; j<DIMENSION; j++){
if(tablero[i][j]!=0){//si
es diferente o igual a cero
continue;
}
for(int k=1;k<=9;k++){
if(esPosibleInsertar(tablero,i,j,k)){
tablero[i][j]=k;
boolean b=resolver(tablero);
if(b){
return true;
}
tablero[i][j]=0;
}
}
return
false;
}
}
System.out.println("Encontrada
solución:");
imprimir(tablero);
return true;
}
public static boolean esPosibleInsertar(int [][]
tablero,
int i, int j, int valor){
//Comprueba
columna
for(int a=0; a<DIMENSION; a++){
if(a!=i &&tablero[a][j]==valor){
return false;
}
}
//Comprueba fila
for(int a=0; a<DIMENSION; a++){
if(a!=j &&tablero[i][a]==valor){
return false;
}
}
//Comprueba cuadardo
int y= (i/3)*3;
int x= (j/3)*3;
for(int a=0; a<DIMENSION/3;a++){
for(int
b=0;b<DIMENSION/3;b++){
if(a!=i
&&b!=j&&tablero[y+a][x+b]==valor){
return false;
}
}
}
return true;
}
}
--------------------Configuration:
<Default>--------------------
070 000 080
050 600 001
003 140 000
906 050 300
000 000 000
005 020 107
000 065 700
300 001 920
040 000 010
Encontrada
solución:
471 592 683
259 683 471
683 147 259
916 758 342
724 316 598
835 924 167
192 865 734
368 471 925
547 239 816
Process
completed.