///////////////////////////////////////////////////////////////////////////////////////
// Devuelve true si @valor ya esta en la fila @fila
private boolean estáEnFila(int fila, int valor) {
// A completar por el alumno
if (fila >= filas) {
return false;
} else {
int j = 0;
boolean Encontrado = false;
while (j < columnas && !Encontrado) {
if (celdas[fila][j] == valor) {
Encontrado = true;
} else {
j++;
}
}
return Encontrado;
}
}
// Devuelve true si @valor ya esta en la columna @columna
private boolean estáEnColumna(int columna, int valor) {
// A completar por el alumno
if (columna >= columnas) {
return false;
} else {
int i = 0;
boolean Encontrado = false;
while (i < filas && !Encontrado) {
if (celdas[i][columna] == valor) {
Encontrado = true;
} else {
i++;
}
}
return Encontrado;
}
}
// Devuelve true si @valor ya esta en el subtablero al que pertence @fila y @columna
private boolean estáEnSubtablero(int fila, int columna, int valor) {
// A completar por el alumno
boolean encontrado = false;
int posx = correspondencia(fila);
int posy = correspondencia(columna);
for (int i = posx; i < posx + 3; i++) {
for (int j = posy; j < posy + 3; j++) {
if (celdas[i][j] == valor) {
encontrado = true;
}
}
}
return encontrado;
}
private int correspondencia(int temp) { ///mio
// int res=0,k=0,aux=temp+1;
int aux = temp / 3, res = 0;
/*
* if((aux)%3==0) { k=(aux)/3; } else { k=((aux)/3)+1; }
*/
switch (aux) {
case 0:
res = 0;
break;
case 1:
res = 3;
break;
case 2:
res = 6;
break;
}
return res;
}
// Devuelve true si se puede colocar el @valor en la @fila y @columna dadas
private boolean sePuedePonerEn(int fila, int columna, int valor) {
// A completar por el alumno
return estáLibre(fila, columna)
&& !estáEnSubtablero(fila, columna, valor)
&& !estáEnColumna(columna, valor) && !estáEnFila(fila, valor);
}
private void resolverTodos(List
// A completar por el alumno
if (estáLibre(fila, columna)) {
for (int k = 1; k <= 9; k++) {
if (sePuedePonerEn(fila, columna, k)) {
celdas[fila][columna] = k;
if (fila <= 8 && columna < 8) {
resolverTodos(soluciones, fila, columna + 1);
} else if (fila < 8 && columna == 8) {
resolverTodos(soluciones, fila + 1, 0);
} else {
this.toString();
soluciones.add(new TableroSudoku(this));
}
}
celdas[fila][columna] = 0;
}
} else {
if (fila <= 8 && columna < 8) {
resolverTodos(soluciones, fila, columna + 1);
} else if (fila < 8 && columna == 8) {
resolverTodos(soluciones, fila + 1, 0);
} else {
this.toString();
soluciones.add(new TableroSudoku(this));
}
}
}
///////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////