Page 140 - INTRODUCCIÓN AL ANÁLISIS DE ALGORITMOS
P. 140

INTRODUCCIÓN AL ANÁLISIS  DE ALGORITMOS


                  Hay que decidir si un vector es k-prometedor; sabiendo que es una extensión de un vector (k −
                  1)-prometedor, únicamente se requiere comprobar la última reina que se deba añadir. Este se puede
                  acelerar si se asocia a cada nodo prometedor el conjunto de columnas, el de diagonales positivas
                  (a 45 grados) y el de diagonales negativas (a 135 grados) controlados por las reinas que ya están
                  puestas.




                  descripción del algoritmo



                  A continuación, se muestra el algoritmo (Horowitz y Sahni, 1978) que arroja la solución de nuestro
                  problema, en el cual S    es un vector global. Para imprimir todas las soluciones, la llamada inicial
                                       1. . . 8
                  es reinas (0,0,0,0) (algoritmo 6.1).





                                       Algoritmo 6.1. Algoritmo para la solución del problema



























                  El algoritmo comprueba primero si k = 8. Si esto es cierto, se tiene un vector 8-prometedor, lo cual
                  indica que cumple todas las restricciones originando una solución. Si k es distinto de 8, el algoritmo
                  explora las extensiones (k + 1)-prometedoras; para ello realiza un bucle, el cual va de 1 a 8 debido al
                  número de reinas. En este bucle se comprueba si entran en jaque las reinas colocadas en el tablero;
                  si no entran en jaque, se realiza una recurrencia en la cual se incrementa k (buscamos (k + 1)-pro-
                  metedor) y se añaden la nueva fila, columna y diagonales al conjunto de restricciones. Al realizar la
                  recurrencia se ha añadido al vector sol una nueva reina, la cual no entra en jaque con ninguna de
                  las anteriores. Además, se ha incrementado el conjunto de restricciones añadiendo una nueva fila,
                  columna y diagonales (una positiva y otra negativa) prohibidas. Un ejemplo del árbol en profundidad
                  se puede ver fácilmente en la figura 6.5 con un ejemplo de las 4 reinas:




                                                              134
   135   136   137   138   139   140   141   142   143   144   145