Example #1
0
    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