Python - Problema de las N-reinas con vuelta atras

 
Vista:

Problema de las N-reinas con vuelta atras

Publicado por Josue Gil (1 intervención) el 17/11/2019 07:19:33
Tengo un problema para ingresar las n-reinas en el tablero, si cumple las condiciones de que no se coman pero no puedo hacer que ingrese todas las reinas, el problema lo tengo con el arreglo de posiciones pero no se como podria solucionarlo, espero que algien me pueda ayudar, dejo el codigo.


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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
import os
from colorama import Fore,init
 
init()
def validar(parte,n):
    correcto=False
    num=0
    while(not correcto):
        try:
            num = int(input(parte))
            if num > 0 and num <= n:
                correcto=True
            else:
                print(Fore.RED,"Teclea un numero positivo, diferente de cero y menor que ", n , Fore.BLACK)
                ValueError
        except ValueError:
            print(Fore.RED,"Error, introduce un numero entero",Fore.BLACK)
    return num
 
def validar_tablero(parte):
    correcto=False
    num=0
    while(not correcto):
        try:
            num = int(input(parte))
            if num > 3 and num < 10:
                correcto=True
            else:
                print(Fore.RED,"Teclea un numero positivo y mayor que tres ",Fore.BLACK)
                ValueError
        except ValueError:
            print(Fore.RED,"Error, introduce un numero entero",Fore.BLACK)
    return num
 
def imprimir(matriz, n):
    for i in range (0,n):
        print("\t", end="")
        for j in range(0,n):
            print("|", matriz[i][j], end = " ")
        print("|")
 
def tamaño_tablero():
    n = validar_tablero("Ingrese el tamaño del tablero: ")
    matriz = []
    arreglo = []
    for i in range(0,n):
        matriz.append([" "])
        arreglo.append(" ")
        for j in range(0,n-1):
            matriz[i].append(" ")
    posicion_inicial(n,matriz,arreglo)
    limpiar_tablero(matriz,n)
    imprimir(matriz, n)
    os.system("pause")
 
def posicion_inicial(n,matriz,arreglo):
    posicion_horizontal = validar("En que fila desea posicionar alguna reina? ",n)
    posicion_vertical = validar("En que columna estara? ",n)
    matriz[posicion_horizontal-1][posicion_vertical-1] = "R"
    verificar_tablero(matriz,n,posicion_horizontal-1,posicion_vertical-1)
    reinas(matriz,n,reina,arreglo)
 
def verificar_tablero(matriz, n, posicion_horizontal, posicion_vertical):
    for i in range(0,n):
        for j in range(0,n):
            if matriz[i][j] == "R":
                for k in range(0,n):
                    if matriz[i][k] == " ":
                        matriz[i][k] = "V"
                    if matriz[k][j] == " ":
                        matriz[k][j] = "V"
                    if (posicion_horizontal-k >= 0) and (posicion_vertical-k >= 0):
                        if matriz[posicion_horizontal-k][posicion_vertical-k] == " ":
                           matriz[posicion_horizontal-k][posicion_vertical-k] = "V"
                    if (posicion_horizontal+k < n) and (posicion_vertical+k < n):
                        if matriz[posicion_horizontal+k][posicion_vertical+k] == " ":
                           matriz[posicion_horizontal+k][posicion_vertical+k] = "V"
                    if (posicion_horizontal-k >= 0) and (posicion_vertical+k <n):
                        if matriz[posicion_horizontal-k][posicion_vertical+k] == " ":
                           matriz[posicion_horizontal-k][posicion_vertical+k] = "V"
                    if (posicion_horizontal+k < n) and (posicion_vertical-k >= 0):
                        if matriz[posicion_horizontal+k][posicion_vertical-k] == " ":
                           matriz[posicion_horizontal+k][posicion_vertical-k] = "V"
 
def limpiar_tablero(matriz,n):
    for i in range(0,n):
        for j in range(0,n):
            if matriz[i][j] != "R":
                matriz[i][j] = " "
 
def verificar_arreglo(arreglo, n, matriz, reina):
    for i in range(0,n):
        if arreglo[i] == " ":
            matriz[arreglo[i-1]][i-1] = "V"
            reina = reina - 1
            reinas(matriz, n, reina, arreglo)
    return(matriz)
 
def reinas(matriz,n,reina,arreglo):
    for i in range(0,n):
        for j in range(0,n):
            if matriz[i][j] == " ":
                matriz[i][j] = "R"
                reina = reina + 1
            if matriz[i][j] == "R":
                arreglo[i] = j
                if arreglo[i] == " ":
                    verificar_arreglo(arreglo, n, matriz, reina)
                verificar_tablero(matriz,n,i,j)
 
    print(arreglo)
    print(matriz)
    print("Reinas en el tablero: ", reina)
 
opc = "s"
while opc == "s" or opc == "S":
    os.system("cls")
    print("\t.:REINAS:.")
    reina = 1
    tamaño_tablero()
    opc = input("Desea continuar? (s/n)")
os.system("cls")
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder