def recorridoKruskal(self): grafoV = Contenedor_particulas.DiccionarioVelocidades(self) grafoNormal = Contenedor_particulas.Diccionario(self) Kruskal = dict() #Se define el grafo resultante #Se define una cola de prioridad (Lista ordenada) colaP = PriorityQueue() for orig in grafoV.keys(): for value in grafoV[orig]: vel = value[0] * -1 dest = (value[1], value[2]) formato = (vel, orig, dest) colaP.put(formato) #Entra a la cola de prioridad lista = [] #definicion del disjoint set for key in grafoNormal.keys(): lista.append(key) #make set ds = DisjointSet(lista) #mientras la lista ordenada no este vacia while not colaP.empty(): print(ds.get()) #Tomar la arista con el menor tiempo de la lista ordenada y eliminar arista = colaP.get() origenREAL = arista[1] destinoREAL = arista[2] print("Arista: ", arista) aristaDestino = (arista[0], arista[2]) #si la tupla origen y la tupla destino no estan en el mismo "set" de todo el disjoint set if ds.find(origenREAL) != ds.find(destinoREAL): #agregar la arista al grafo resultante if origenREAL in Kruskal: Kruskal[origenREAL].append(aristaDestino) else: Kruskal[origenREAL] = [aristaDestino] #unir los conjuntos donde se encuentren el OrigenREAL, y el DestinoREAL ds.union(origenREAL, destinoREAL) print(ds.get()) print("\n\nRecorrido de Kruskal\n") pprint(Kruskal) return Kruskal