Aquellos que son usuarios (y sólo usuarios), están tan acostumbrados a que sus amados computadores les resuelvan todo que no están ni cerca de experimentar un trabajo repetitivo de ensayo y error.
El problema de las ocho reinas es un clásico del ingenio y cual más cual menos, debe utilizar el backtracking para solucionarlo.
El algoritmo general del problema de las ocho reinas se resuelve así:
- Se coloca una reina en alguna de las filas.
- Se siguen intentando colocar la siguiente reina en la siguiente fila preguntando en cada posición si está amenazada por otra reina existente.
- Si no quedan más posiciones, se vuelve a la pieza anterior y se sigue intentando por las siguientes columnas de su fila
¿Nada más?
Nada más. Eso es el algoritmo general. Cuanto más general mayores posibilidades de hacerlo recursivo.
5.- Confeccione una función recursiva que llene un tablero de ajedrez con 8 reinas sin que estas se amenacen entre sí:
La implementación en Java es la siguiente:
public void reinas(int i, int j, int dama)
{
// Mientras no haya recorrido todo el tablero...
if ( estaDentro(i,j) )
{
// ...y si la posición en la que voy a poner la
// reina no está amenazada...
if (noAmenazada(i,j))
{
//Ponemos la reina
T[i][j]=dama;
//BORDE: Si logramos colocar la última reina
//Imprimimos el tablero con la solución
if (dama == N) imprimir();
//Y si no es la última recurrimos por la
//siguiente fila
reinas(i+1, 0, dama + 1);
//Si lo anterior falla sacamos la reina
T[i][j]=0;
}
// Si la posición está amenazada recurrimos por la
// siguiente columna.
reinas(i, j+1, dama);
//Si lo anterior falló, quitamos la reina T[i][j]=0; } }
No hay comentarios:
Publicar un comentario