Práctica 3
private boolean estáEnFila(int fila, int valor) {
// A completar por el alumno
boolean encontrado = false;
int i = 0;
while ((!encontrado) && (i < columnas)) {
if ((celdas[fila][i]) == valor) {
encontrado = true;
} else {
i++;
}
}
return encontrado;
}
// Devolver true si @valor ya está en la columna @columna
private boolean estáEnColumna(int columna, int valor) {
// A completar por el alumno
int i = 0;
boolean encontrado = false;
while (!encontrado && i < filas) {
if (celdas[i][columna] == valor) {
encontrado = true;
} else {
i++;
}
}
return encontrado;
}
/* Devolver true si @valor ya está 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) {
int aux = temp / raízFilas, res = 0;
switch (aux) {
case 0:
res = 0;
break;
case 1:
res = 3;
break;
case 2:
res = 6;
break;
}
return res;
}
// Devolver 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
columna) {
// 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));
}
}
}

