-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtestqueens.py
More file actions
executable file
·81 lines (68 loc) · 2.73 KB
/
Copy pathtestqueens.py
File metadata and controls
executable file
·81 lines (68 loc) · 2.73 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
def Reinas(solucion,etapa,n):
# si la etapa es mayor que n, entonces devolvemos falso
etapa>=n:
return False
#solucion.append(0)
# inicializamos exito a False
exito = False
while True:
if (solucion[etapa] < n):
""" si el valor de la columna para la fila es mayor o igual que n,
entonces no seguimos incrementando, con esto evitamos indices fuera
del array."""
solucion[etapa] = solucion[etapa] + 1
# incrementamos el valor de columna para la reina i-esima de
# la fila i-esima.
if (Valido(solucion,etapa)):
# si la reina i-esima de la fila i-esima de la columna j en la
#etapa k no entra en conflicto con otra reina, proseguimos.
if etapa != n-1:
# si aun no hemos acabado todas las etapas, procedemos a la
#siguiente etapa.
exito = Reinas(solucion, etapa+1,n)
if exito==False:
# si del valor devuelto de Reinas tenemos falso, ponemos
# a 0 el valor de la etapa + 1 para asi descartar los
#nodos fracaso.
solucion[etapa+1] = 0
else:
print solucion
# si ya hemos acabado, imprimimos la disposicion de las
#fichas en el tablero y devolvemos True.
for x in range(n):
for i in range(n):
if solucion[x] == i+1:
print "X",
else:
print "- ",
print "\n"
exito = True
if (solucion[etapa]==n or exito==True):
# si el valor de la columna j de la etapa k es igual a n o
#exito es igual a True, salimos del bucle y devolvemos exito.
break
return exito
def Valido(solucion,etapa):
# Comprueba si el vector solucion construido hasta la etapa es
# prometedor, es decir, si la reina se puede situar en la columna de la etapa
for i in range(etapa):
if(solucion[i] == solucion[etapa]) or (ValAbs(solucion[i],
solucion[etapa])==ValAbs(i,etapa)):
return False
return True
def ValAbs(x,y):
if x>y:
return x - y
else:
return y - x
###############################
print "PROBLEMA DE LAS N - REINAS"
print "#"*26
print "\n"
print "Introduce el numero de reinas:\n"
n = input()
solucion = []
for i in range(n):
solucion.append(0)
etapa = 0
print Reinas(solucion, etapa, n)