Sofía:
Supon que el vector V = [v1,v2,v3,v4,v5,v6,v7,v8] representa las posiciones de ocho reinas en un tablero de ajedrez, con una reina en cada columna, es decir:
Si V[i] = vj ( 1 = i,j = 8 ) entonces la reina colocada en la columna i esta en la fila vj.
FORMULA REAL.
Si V[i] = 0 ( 1 = i = 8 ) entonces todavía no se ha colocado una reina en la columna i
V = {[v1,v2,v3,v4,v5,v6,v7,v8] :
para todo i,j : 1 < = i,j <= 8 : (1 <= vi <= 8)&&(i != j -> vi != vj)&&(|vi-vj| != |i-j|)}
2006-12-10 15:30:37
·
answer #1
·
answered by Anonymous
·
8⤊
0⤋
Podemos numerar las 8 reinas del 1 al 8, asà cada reina tiene un identificador propio, es decir, “un nombre propio”. Como cada reina puede amenazar a todas las reinas que estén en la misma fila, cada una ha de situarse en una fila diferente, lo mismo sucede con las columnas y diagonales. Para ello representamos el tablero mediante un vector, el cual tiene longitud 8, este vector tiene este significado:
Vector [3,1,6,2,8,6,4,7] a la reina 1 esta en la columna 3, la reina 2 en la columna 1, la reina 3 en la columna 6, la reina 4 en la columna 2, etc. Como se puede apreciar esta solución es incorrecta ya que estarÃan la reina 3 y la 6 en la misma columna. Por tanto el vector corresponderÃa a una permutación de los ocho primeros números enteros.
El problema de las filas y columnas lo tenemos cubierto, ¿pero qué ocurre con las diagonales? Para las posiciones sobre una misma diagonal descendente se cumple que tienen el mismo valor fila – columna, mientras que para las posiciones en la misma diagonal ascendente se cumple que tienen el mismo valor fila + columna. AsÃ, si tenemos dos reinas colocadas en posiciones (i,j) y (k,l) entonces están en la misma diagonal si cumple:
i – j = k – 1 ó i + j = k + 1 j – 1 = i – k ó j – 1 = k – i
Y por tanto, están en la misma diagonal si y solo si
Con todas las consideraciones tenidas en cuenta podemos aplicar el esquema de vuelta atrás para implementar las ocho reinas de una manera realmente eficiente. Para ello, reformulamos el problema como un problema de búsqueda en un árbol. Decimos que en un vector V[1..k] de enteros entre 1 y 8 es k-prometedor, para 0â¤kâ¤8 , si ninguna de las k reinas colocadas en las posiciones (1,V[1]), (2,V[2]),…, (k,V[k]) amenaza a ninguna de las otras. Las soluciones a nuestro problema se corresponden con aquellos vectores que son 8-prometedores.
El Algoritmo (junto a una explicación muy detallada) lo puedes encontrar en la siguiente página:
http://es.wikipedia.org/wiki/Las_ocho_reinas
Saludos!
2006-12-10 19:10:21
·
answer #2
·
answered by killer tomato 4
·
0⤊
2⤋