import tkinter as tk
import Furkerson as FK
import Procesos as pc
global ejemplo
ejemplo = [[0,7,6 ,0 ,7 ,9 ,4 ,1],
[0 ,0 ,3 ,1 ,0 ,2 ,0 ,3],
[0 ,0 ,0 ,3 ,3 ,2 ,6 ,0],
[0 ,0 ,0 ,0 ,9 ,3 ,5 ,0],
[0 ,0 ,0 ,0 ,0 ,8 ,2 ,0],
[0 ,0 ,0 ,0 ,0 ,0 ,0 ,8],
[0 ,0 ,0 ,0 ,0 ,0 ,0 ,9],
[0 ,0 ,1 ,0 ,7 ,0 ,0 ,0]]
def Resultado1():
Flujo = [Link](ejemplo,len(ejemplo))
[Link](Flujo)
def Resultado2():
Maximo, Flujo = [Link](ejemplo,0,2)
G = [Link](ejemplo,len(ejemplo),Flujo)
[Link](G)
def Tutorial1():
ventana = [Link]()
[Link]("Tutorial principal 1")
[Link]("500x550")
[Link](bg="lightblue")
Titulo = [Link](ventana, text="Como usar el programa", font= ("Helvetica",
16, "bold", "underline"))
[Link](pady=20)
[Link](bg="lightblue")
[Link](x=130,y=30)
Texto1 = [Link](ventana, text="Bienvenido a la solucion del grupo 1, en donde
podrás hallar fácilmente el flujo")
Texto2 = [Link](ventana, text="máximo de una red. A continuación se
detallaran los pasos para su uso:")
Texto3 = [Link](ventana, text="Paso 1: Generar matriz o cargar una", font=
("Helvetica", 16, "bold"))
Texto4 = [Link](ventana, text="Para generar una matriz, el usuario debe
insertar un numero del 8 al 16 en el espacio")
Texto5 = [Link](ventana, text="donde dice N° de nodos de la red y pulsar el
boton Generar Matriz. En caso se requiera")
Texto6 = [Link](ventana, text="cargar una matriz, esta debe estar en un
archivo .txt y cada valor debe ser entre 1 y 9.")
Texto7 = [Link](ventana,text="Si el proceso se realizo con éxito, el recuadro
blanco se rellenara con los valores.")
Texto8 = [Link](ventana,text="Paso 2: Visualizar la red", font= ("Helvetica",
16, "bold"))
Texto9 = [Link](ventana,text="Para visualizar la red, se deberá pulsar el
botón Mostrar red teniendo ya una matriz")
Texto10 = [Link](ventana,text="generada o cargada, caso contrario no pasará
nada. Si se realizó con éxito, esta se podrá")
Texto11 = [Link](ventana,text="visualizar correctamente.")
Texto12 = [Link](ventana,text="Para continuar con el tutorial, deberás pulsar
el botón Flujo max. y Como usar")
boton = [Link](ventana,text="Siguiente", command=Tutorial2)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](x=30,y=90)
[Link](x=30,y=110)
[Link](x=30,y=150)
[Link](x=30,y=190)
[Link](x=30,y=210)
[Link](x=30,y=230)
[Link](x=30,y=250)
[Link](x=30,y=290)
[Link](x=30,y=330)
[Link](x=30,y=350)
[Link](x=30,y=370)
[Link](x=30,y=390)
[Link](x=430,y=500)
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
def Tutorial2():
ventana = [Link]()
[Link]("Tutorial Ford Furkerson")
[Link]("500x550")
[Link](bg="lightblue")
Titulo = [Link](ventana, text="Mostrando el flujo máximo", font=("Helvetica",
16, "bold", "underline"))
[Link](pady=20)
[Link](bg="lightblue")
[Link](x=130,y=30)
Texto1 = [Link](ventana, text="Una vez generada una matriz e interpretado su
flujo,")
Texto2 = [Link](ventana, text="el usuario podrá hallar el flujo máximo entre
2 nodos en este.")
Texto3 = [Link](ventana, text="Se deben seguir los siguientes pasos para que
se muestre correctamente:")
Texto4 = [Link](ventana, text="Paso 1: Seleccionar los nodos",
font=("Helvetica", 16, "bold"))
Texto5 = [Link](ventana,text="Se deben seleccionar 2 nodos para poder
realizar el proceso y después")
Texto6 = [Link](ventana,text="pulsar el boton mostrar max.")
Texto7 = [Link](ventana,text="En caso de que se seleccione un mismo nodo, no
se encuentre un camino o")
Texto8 = [Link](ventana,text="se inserte una opcion que no esta dentro del
rango de los nodos, el programa")
Texto9 = [Link](ventana, text="devolvera un error. ")
Texto10 = [Link](ventana,text="Paso 2: Visualizar la representación",
font=("Helvetica", 16, "bold"))
Texto11 = [Link](ventana,text="Si se realizó correctamente, se podrá
visualizar el flujo máximo total y una")
Texto12 = [Link](ventana,text="representación de este acompañada del flujo
usado en cada arista.")
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
[Link](x=30,y=90)
[Link](x=30,y=110)
[Link](x=30,y=130)
[Link](x=30,y=170)
[Link](x=30,y=210)
[Link](x=30,y=230)
[Link](x=30,y=250)
[Link](x=30,y=270)
[Link](x=30,y=290)
[Link](x=30,y=330)
[Link](x=30,y=370)
[Link](x=30,y=390)
def Paso_Paso1():
ventana = [Link]()
[Link]("Paso a Paso 1")
[Link]("500x550")
[Link](bg="lightblue")
Titulo = [Link](ventana, text="Encontrando el flujo máximo",
font=("Helvetica", 16, "bold", "underline"))
[Link](pady=20)
[Link](bg="lightblue")
[Link](x=130,y=30)
Texto1 = [Link](ventana, text="Esta seccion está dedicada a explicar el
algoritmo de Ford Furkerson")
Texto2 = [Link](ventana, text="y como se aplica a través de grafos. A
continuación se muestran los pasos:")
Sub_titulo1 = [Link](ventana,text="Paso 1: Interpretar una matriz a flujo",
font=("Helvetica", 16, "bold"))
Texto3 = [Link](ventana, text="Una matriz puede ser intepretada como un
flujo. Interpretemos esta:")
Var = [Link](ventana,text= " A B C D E F G H")
Mat1 = [Link](ventana,text="A 0 7 6 0 7 9 4 1")
Mat2 = [Link](ventana,text="B 0 0 3 1 0 2 0 3")
Mat3 = [Link](ventana,text="C 0 0 0 3 3 2 6 0")
Mat4 = [Link](ventana,text="D 0 0 0 0 9 3 5 0")
Mat5 = [Link](ventana,text="E 0 0 0 0 0 8 2 0")
Mat6 = [Link](ventana,text="F 0 0 0 0 0 0 0 8")
Mat7 = [Link](ventana,text="G 0 0 0 0 0 0 0 9")
Mat8 = [Link](ventana,text="H 0 0 1 0 7 0 0 0")
Texto4 = [Link](ventana,text="Interpretamos la matriz a flujo añadiendo
aristas a sus respectivos nodos.")
Texto5 = [Link](ventana,text="Si recordamos que 0 implica que no hay arista,
el resultado debe ser asi:")
Boton = [Link](ventana,text="Siguiente", command=Paso_Paso2)
[Link](pady=10)
[Link](x=430,y=500)
Resultado = [Link](ventana,text="Resultado",command=Resultado1)
[Link](pady=10)
[Link](x=200,y=450)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
Sub_titulo1.pack(pady=10)
[Link](x=30,y=90)
[Link](x=30,y=110)
Sub_titulo1.place(x=30,y=150)
[Link](x=30,y=190)
[Link](x=200,y=210)
[Link](x=200,y = 230)
[Link](x=200,y = 250)
[Link](x=200,y = 270)
[Link](x=200,y = 290)
[Link](x=200,y = 310)
[Link](x=200,y = 330)
[Link](x=200,y = 350)
[Link](x=200,y = 370)
[Link](x=30,y=400)
[Link](x=30,y=420)
[Link](background="lightblue")
Sub_titulo1.configure(background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
def Paso_Paso2():
ventana = [Link]()
[Link]("Paso a Paso 2")
[Link]("550x800")
[Link](bg="lightblue")
Sub_titulo2 = [Link](ventana,text="Paso 2: Seleccionar 2 aristas",
font=("Helvetica", 16, "bold"))
Texto1 = [Link](ventana,text="Una vez obtenido el flujo seleccionamos 2
nodos, uno como punto de inicio")
Texto2 = [Link](ventana,text=" y otro como destino. A partir de aqui
empezamos a calcular todas las rutas")
Texto3 = [Link](ventana,text="desde el nodo de inicio al nodo de destino. En
este ejemplo vamos a")
Texto4 = [Link](ventana,text="estar usando el nodo A y C como nodos de inicio
y destino respectivamente.")
Sub_titulo3 = [Link](ventana,text="Paso 3: Calcular las rutas",
font=("Helvetica", 16, "bold"))
Texto5 = [Link](ventana,text="Recuerda que el camino del flujo máximo se basa
en")
Texto6 = [Link](ventana,text="utilizar las aristas que cuenten con mayor
capacidad para")
Texto7 = [Link](ventana,text="poder transportar mayor flujo de un nodo a
otro.")
Texto8 = [Link](ventana,text="Siguiendo con nuestro previo ejemplo, las rutas
serian asi:")
Etiquetas1 = [Link](ventana,text="[-,∞] [A,7] [B,3]")
Ruta1 = [Link](ventana,text=" A -> B -> C Flujo=3" )
Etiquetas2 = [Link](ventana,text="[-,∞] [A,6]")
Ruta2 = [Link](ventana,text=" A -> C Flujo=6")
Etiquetas3 = [Link](ventana,text="[-,∞] [A,1] [H,1]")
Ruta3 = [Link](ventana,text=" A -> H -> C Flujo=1")
#Imagen
Texto9 = [Link](ventana,text="Una vez no se pueda pasar más flujo por las
aristas al nodo destino, procedemos a sumar")
Texto10 = [Link](ventana,text="el flujo usado total y tendremos:")
Flow = [Link](ventana,text="|f|= 3+6+1 = 10")
Texto11 = [Link](ventana,text="Ahora actualizamos nuestra representación de
flujo y nos debe quedar asi:")
Boton = [Link](ventana,text="Flujo max.", command=Resultado2)
[Link](pady=10)
[Link](x=250,y=600)
Texto12 = [Link](ventana,text="Para comprobar de que hemos encontrado el
flujo maximo entre los 2 nodos podemos realizar")
Texto13 = [Link](ventana,text="un corte entre las aristas usadas. En este
caso vamos a usar las aristas [B,C], [A,C] y [H,C]")
Texto14 = [Link](ventana,text="Sumamos el flujo usado en cada arista
conformada en el corte y en caso sea igual al flujo")
Texto15 = [Link](ventana,text="encontrado, se confirma que realizamos el
proceso con éxito.")
[Link](pady=10)
Sub_titulo2.pack(pady=10)
Sub_titulo3.pack(pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
[Link](pady=10)
Sub_titulo2.place(x=30,y=30)
[Link](x=30,y=70)
[Link](x=30,y=90)
[Link](x=30,y=110)
[Link](x=30,y=130)
Sub_titulo3.place(x=30,y=170)
[Link](x=30,y=210)
[Link](x=30,y=230)
[Link](x=30,y=250)
[Link](x=30,y=270)
[Link](x=30,y=310)
[Link](x=30,y=330)
[Link](x=30,y=360)
[Link](x=30,y=380)
[Link](x=30,y=410)
[Link](x=30,y=430)
[Link](x=30,y=470)
[Link](x=30,y=490)
[Link](x=30,y=530)
[Link](x=30,y=550)
[Link](x=30,y=660)
[Link](x=30,y=680)
[Link](x=30,y=700)
[Link](x=30,y=720)
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
Sub_titulo2.configure(background="lightblue")
Sub_titulo3.configure(background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")
[Link](background="lightblue")