Sunteți pe pagina 1din 18

BackTrack N-Reinas

Grupo : 16 Jos Alfredo Yucra Cofr Mac Giver Montenegro Heredia Jos Antonio Choque Hebert Rodriguez Canizares

BackTrack
. Es una tcnica algortmica para encontrar soluciones intentando una de varias opciones. Si la opcin prueba incorrecto, el cmputo retrocede e intenta otra opcin. Es a menudo conveniente mantener puntos bien escogidos y opciones alternas usando la repeticin

Las tcnicas de backtracking o algoritmos de vuelta atrs se suelen utilizar en los problemas de optimizacin y en teora de juegos para explorar todas las soluciones posibles a un problema y luego seleccionar la mejor (utilizan la recursin para probar sistemticamente todas las posibilidades)

N Reinas
Este juego consiste en colocar N-Reinas en un tablero N x N, de tal manera que ninguna de ellas se ataque. Para resolver este problema utilizamos el Algoritmo del BackTrack ( Retroceso ) :

Bolean BackTrack( Datos ) { if( Terminacion( Datos ) ) return( true );


Reglas = ReglasAplicables( Datos ); While( !Vacia( Reglas ) ) { R = ElegirMejorRegla( Reglas, Datos ); RDatos = AplicarRegla( R, Datos ); if( BackTrack( RDatos ) ) return( true ); } return( false ); }

Para optimizar ste algoritmo de bsqueda hemos aplicado la HEURISTICA del SALTO DE CABALLO. bool Estado::hayMovCaballo( int c ) { return ( ( c + 2 ) <= ( d - 1 ) ); }

Analizando la bsqueda de la solucin por medio del BackTrack hemos encontrado un patrn a seguir : Si la dimensin del tablero es par, se coloca la primera reina en la posicin ( 1, 2 ), a partir de esa posicin se sigue el moviendo del caballo utilizado en el juego de ajedrez hasta la ltima columna, a partir de este estado la siguiente reina se ubica en la fila subsiguiente y primera columna, nuevamente se inicia con el salto del caballo.

Si la dimensin es impar, la primera reina se coloca en la posicin ( 1,1 ), a partir de esa posicin se sigue el moviendo del caballo utilizado en el juego de ajedrez hasta la ltima columna permitida, a partir de este estado la siguiente reina se ubica en la fila subsiguiente y segunda columna, nuevamente se inicia con el salto del caballo.

Existe casos especiales en los que no se cumple el patrn ya antes mencionado, los cuales son: Caso 8 ( N = 8 ) En este caso se inicia en la posicin ( 1 , 2 ) por ser de dimensin par, se sigue con el movimiento del caballo hasta la columna final, a partir de la siguiente posicin se utiliza el BackTrack normal. Para N % 8 = 0.

Caso 9 ( N = 9 ) En este caso al analizar la bsqueda de la solucin hemos encontrado que el camino que nos lleva a la solucin es a partir de (N / 2) + 1, a partir de esta posicin se sigue con el movimiento del caballo hasta la columna permitida, a partir de la siguiente posicin se utiliza el BackTrack normal. Asociados a este caso tenemos para N = 15 , N = 17, N = 21 , N = 25, N = 27, N = 29, N = 33, etc.

Caso 14 ( N = 14 ) En este caso se inicia en la posicin ( 1 , 2 ) por ser de dimensin par, se sigue con el movimiento del caballo hasta la columna final, a partir de la siguiente posicin se utiliza el BackTrack normal. Para N % 14 = 0.

Estructura de Datos
Para modelar este problema hemos utilizado el manejo de bitwise, a partir de un vector dinmico de enteros hemos modelado una matriz de N x N para representar el tablero. Al usar esta estructura de datos se ahorra espacios de memoria, ya que la matriz se modela en el espacio requerido.

Lista
Esta estructura dinmica est compuesta por nodos cuyos atributos son: struct Nodo { Regla Data; Nodo *Link; };

Esta lista se utiliza para almacenar las reglas aplicables a un estado.

Adems hemos utilizado las siguientes clases: Regla utilizada en la estructura de datos Lista.

La clase Estado funciona como contenedor de las dems clases, en ella se aplica la heurstica mencionada anteriormente.

S-ar putea să vă placă și