El problema de las n reinas (mediante búsqueda por anchura en espacios de estados)
El problema de las n reinas consiste en colocar n reinas en un tablero cuadrado de dimensiones n por n de forma que no se encuentren más de una en la misma línea: horizontal, vertical o diagonal.
Las posiciones de las reinas en el tablero se representan por su columna y su fila.
type Columna = Int type Fila = Int
Una solución del problema de las n reinas es una lista de posiciones.
type SolNR = [(Columna,Fila)]
Usando el procedimiento de búsqueda en anchura, definir las funciones
solucionesNR :: Columna -> [SolNR] primeraSolucionNR :: Columna -> SolNR nSolucionesNR :: Columna -> Int
tales que
-
solucionesNR nes la lista de las soluciones del problema de las n reinas, por búsqueda de espacio de estados en anchura. Por ejemplo,
take 3 (solucionesNR 8) [[(1,8),(2,4),(3,1),(4,3),(5,6),(6,2),(7,7),(8,5)], [(1,8),(2,3),(3,1),(4,6),(5,2),(6,5),(7,7),(8,4)], [(1,8),(2,2),(3,5),(4,3),(5,1),(6,7),(7,4),(8,6)]]
-
primeraSolucionNR nes la primera solución del problema de las n reinas, por búsqueda en espacio de estados por anchura. Por ejemplo,
λ> primeraSolucionNR 8 [(1,8),(2,4),(3,1),(4,3),(5,6),(6,2),(7,7),(8,5)]
-
nSolucionesNR nes el número de soluciones del problema de las n reinas, por búsqueda en espacio de estados. Por ejemplo,
nSolucionesNR 8 == 92