1. Problema de las 8 Reinas
Algoritmos Computacionales
Esteban González
http://esteban-gzz.blogspot.
com/
2. Problema de las 8 Reinas
El problema de las ocho reinas se trata de un acertijo
en el que se colocan ocho reinas sin que se amenacen.
Fue propuesto por el ajedrecista alemán Max Bezzel en
1848. En el juego de ajedrez la reina amenaza a
aquellas fichas que se encuentren en su misma fila,
columna o diagonal.
Las 8 reinas consiste en colocar sobre un tablero de
ajedrez ocho reinas sin que estas se den jaques entre
ellas.
3. Planteamiento
Las reinas en el ajedrez se pueden atacar
horizontalmente, verticalmente y en diagonal.
Se busca encontrar el acomodo de 8 reinas en un
tablero de 8 por 8, donde ninguna reina de jaque a
otra.
4. Planteamiento
Algoritmo:
- Colocar la reina n en la primera casilla válida de la fila
n
- Si una reina no puede llegar a colocarse en ninguna
casilla, se vuelve atrás y se cambia la posición de la
reina n-1
- Intentar colocar las reinas restantes en las filas que
quedan
5. Problema de las n Reinas
El problema de las ocho Reinas es generalizado por el
problema de las n Reinas.
El problema consiste en colocar n Reinas en un tablero
de ajedrez de de tal manera que ninguna de las Reinas
quede atacando a otra.
El tamaño del tablero de ajedrez para este problema es
de tamaño n*n.
Existe un algoritmo que resuelve este problema
generalizado usando la recursión.
6. Algoritmo
Esta es la función recursiva para encontrar el orden para
acomodar a las Reinas. Vemos que cuando se llama a si
misma se tiene que incrementar el número de la fila en 1.
7. Algoritmo
Del código anterior tenemos una condición antes de la
llamada recursiva que es "comprobar". Lo que hace es
verificar si ya hay alguna colocada en la fila, la columna y
su diagonal.
8. Ejemplo
En el ejemplo de corrida cuando colocamos como
argumento el valor de 8, que es tomado como el numero
de reinas, nos imprime como queda la tabla.
9. Ejemplo
Así quedaría nuestro tablero para el caso clásico de las 8
reinas.
Comprobamos visualmente que ninguna da jaque a otra.
10. Existe forma iterativa
La recursión puede evitarse si pensamos en la estrategia
de backtracking como una búsqueda en profundidad en un
árbol implícito en el que cada nodo interno es un arreglo A
con una asignación parcial de valores para k variables.
El parámetro k es el nivel de cada nodo y los nodos hoja
consisten en asignaciones completas de variables para A,
esto es k = n = length[A].
Una búsqueda iterativa puede hacerse bajando a través de
los nodos siempre que sean prometedores, si nos
topamos con uno que no sea prometedor subimos de nivel
restando uno a k.