Crear Tkinter para el algoritmo de Bellman-Ford Python 3.7
Publicado por Diego (2 intervenciones) el 27/08/2019 02:38:08
Hola buenos días tardes o noches depende de tu país , agradecería mucho la ayuda por favor con mi siguiente problema :
empiezo diciendo que soy novato en esto de programación.
modifique un código (extraido de esta web) en python 3.7 con el algoritmo de Bellman-Ford para determinar las rutas mas cortas de una ciudad a otra, dentro un país, en este caso Bolivia .
Lo que quiero hacer es poder crear alguna ventana con Tkinter para que en ella se ejecute este código y se pueda seleccionar el origen y el destino para obtener la ruta mas corta.
de verdad agradecería mucho la ayuda .
el código es el siguiente :
empiezo diciendo que soy novato en esto de programación.
modifique un código (extraido de esta web) en python 3.7 con el algoritmo de Bellman-Ford para determinar las rutas mas cortas de una ciudad a otra, dentro un país, en este caso Bolivia .
Lo que quiero hacer es poder crear alguna ventana con Tkinter para que en ella se ejecute este código y se pueda seleccionar el origen y el destino para obtener la ruta mas corta.
de verdad agradecería mucho la ayuda .
el código es el siguiente :
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
"""
PA
/ | \
644 | 448
/ | \
LP | BN
/ \ | / \
233 387 | 356 434
/ \ | / \
OR — 214 — CB — 477 — SC
\ / | \ /
311 520 | 651 406
\ / | \ /
PT 798 CH
\ | /
346 | 397
\ | /
TJ
"""
import math
# Cada elemento de este diccionario contiene una posición del camino y
# como valor tiene una lista con el cálculo del camino más corto, y el origen del mismo.
valores={
"Pando":[math.inf,""],
"La Paz":[math.inf,""],
"Beni":[math.inf,""],
"Cochabamba":[math.inf,""],
"Oruro":[math.inf,""],
"Santa Cruz":[math.inf,""],
"Chuquisaca":[math.inf,""],
"Potosi":[math.inf,""],
"Tarija":[math.inf,""]
}
# aquí establecemos cada uno de los caminos en una sola dirección y la distancia en kilometros.
caminos=[
["Pando","La Paz",644],
["Pando","Beni",448],
["La Paz","Oruro",233],
["La Paz","Cochabamba",387],
["Beni","Cochabamba",356],
["Beni","Santa Cruz",434],
["Oruro","Cochabamba",214],
["Oruro","Potosi",311],
["Cochabamba","Potosi",520],
["Cochabamba","Santa Cruz",477],
["Cochabamba","Chuquisaca",651],
["Santa Cruz","Chuquisaca",406],
["Potosi","Tarija",346],
["Chuquisaca","Tarija",397],
["Tarija","Cochabamba",798]
]
print()
def setValores(origen,destino,valor):
"""
#Función que actualiza el valor del diccionario valores, actualizando
el valor al mas bajo e indicando de que punto viene el camino mas corto
"""
if valor<valores[destino][0]:
# guardamos el nuevo valor mas bajo
valores[destino][0]=valor
# guardamos de donde viene el valor mas bajo
valores[destino][1]=origen
return True
return False
# definimos el inicio y el destino :
inicio = input("Introduzca la ciudad de partida : ")
final = input("Introduzca su destino final : " )
valores[inicio][0]=0
# realizamos un bucle hasta que no haya ningun otro cambio de valores
while True:
cancel=True
# recorremos cada uno de los caminos
for i in caminos:
# enviamos los datos del camino
if setValores(i[0],i[1],valores[i[0]][0]+i[2]):
cancel=False
# enviamos los datos del camino de forma invertida
if setValores(i[1],i[0],valores[i[1]][0]+i[2]):
cancel=False
# finalizamos el bucle cuando ya no hay ningun cambio en los valores
if cancel:
break
# iniciamos la busqueda del camino mas corto
camino=[final]
while True:
if camino[-1]==inicio:
break
camino.append(valores[camino[-1]][1])
print("El camino mas corto desde la ciudad de '{}' a la ciudad de '{}' es:{} ".format(inicio, final, camino[::-1]))
Valora esta pregunta


0