Example #1
0
def gerar_grafo(num_vertices):
    G = nx.connected_watts_strogatz_graph(num_vertices,25, 0.5)
    #G = nx.complete_graph(num_vertices)
    a = G.edges()
    matriz = []
    for i in range(num_vertices):
        matriz.append([0]*num_vertices)
    for v1,v2 in a:
        n = random.randint(10,100)
        matriz[v1][v2] = n
        matriz[v2][v1] = n
        #atribuição do peso no grafo
        G.edges[v1,v2]['weight']=n
    k = kr()
    A = prim.Graph(num_vertices)
    A.graph = matriz
    
    mst = k.kruskal(G)
    mst_prim = A.primMST()
    

    plt.show()
    nx.draw(G,node_size=5,alpha=1,node_color="black", edge_color = "#1880C7", with_labels=False)
    plt.axis('equal')
    plt.savefig('Grafo.png')
    plt.show()
    plt.figure(figsize=(8,8))
    nx.draw(mst_prim,node_size=5,alpha=1,node_color="black", edge_color = "#1880C7", with_labels=False)
    plt.axis('equal')
    plt.savefig('mst_prim.png')
    plt.show()
    nx.draw(mst,node_size=5,alpha=1,node_color="black", edge_color = "#1880C7", with_labels=False)
    plt.axis('equal')
    plt.savefig('mst_kruskal.png')
    plt.show()
Example #2
0
        'weight': 2
    }),
    ('C', 'D', {
        'weight': 1
    }),
])
arvore_minima = nx.Graph()
arvore_minima.add_nodes_from((['A', 'B', 'C', 'D']))
arvore_minima.add_edges_from([
    ('A', 'B', {
        'weight': 1
    }),
    ('B', 'D', {
        'weight': 2
    }),
    ('C', 'D', {
        'weight': 1
    }),
])

grafo2 = nx.Graph()
grafo2.add_weighted_edges_from([(1, 2, 4), (1, 3, 8), (2, 3, 11), (2, 4, 8),
                                (3, 6, 7), (3, 7, 1), (6, 4, 2), (6, 7, 20),
                                (7, 8, 2), (4, 8, 4), (5, 8, 14), (5, 9, 9),
                                (8, 9, 10), (4, 5, 7)])

k = kr()
#assert kruskal(grafo) == arvore_minima
mst = k.kruskal(grafo2)
print(mst.edges)
print(k.peso(mst))
Example #3
0
def gerar_graficos_grafo_nao_completo():
    k = kr()
    lista_vertices=list()
    lista_media_tempo_kruskal= list()
    lista_media_tempo_prim= list()
    total = 2011
    tempo_total = time.time()
    for num_vertices in range(10,total, 100):

        print('Número de Vértices: ',num_vertices)
        #criar grafo não completo
        G = nx.connected_watts_strogatz_graph(num_vertices,int(num_vertices/2),1)
        
        a = G.edges()
        matriz = []
        for i in range(num_vertices):
            matriz.append([0]*num_vertices)
        for v1,v2 in a:
            n = random.randint(10,100)
            matriz[v1][v2] = n
            matriz[v2][v1] = n
            #atribuição do peso no grafo
            G.edges[v1,v2]['weight']=n

        A = prim.Graph(num_vertices)
        A.graph = matriz
        soma_kruskal=0.
        soma_prim = 0.
        for i in range(1, 11):
            #Kruskal
            start= time.time()
            mst = k.kruskal(G)
            tempo = time.time() - start
            soma_kruskal +=tempo;
            #Prim
            start= time.time()
            parent = A.primMST()
            tempo = time.time() - start
            soma_prim += tempo;

        print("Tempo execução (média) Kruskal: ",soma_kruskal/10,"seconds")
        print("Tempo execução (média) Prim: ",soma_prim/10,"seconds")
        lista_vertices.append(num_vertices)
        lista_media_tempo_kruskal.append(soma_kruskal/10)
        lista_media_tempo_prim.append(soma_prim/10)

    print("Total Time : ", time.time() - tempo_total)
    plt.plot(lista_vertices, lista_media_tempo_prim, label = "Prim's algorithm")
    plt.plot(lista_vertices, lista_media_tempo_kruskal, label = "Kruskal's algorithm")
    plt.legend()
    plt.axis([0, total+10, 0, max(lista_media_tempo_kruskal) * 2])
    plt.ylabel('Tempo de execução (Segundos)')
    plt.xlabel('Número de Vértices')
    plt.title("Comparação de desempenho: Kruskal x Prim (Grafos não completos)")
    plt.savefig('Kruskal x Prim - Grafos não completos.png')
    plt.show()

    print("lista de vertices")
    print(lista_vertices)
    print("tempo medio kruskal")
    print(lista_media_tempo_kruskal)
    print("tempo medio prim")
    print(lista_media_tempo_prim)
Example #4
0
def gerar_graficos_grafo_completo():
    k = kr()
    lista_vertices=list()
    lista_media_tempo_kruskal= list()
    lista_media_tempo_prim= list()
    total = 2011
    tempo_total = time.time()
    for num_vertices in range(10,total, 100):

        print('Número de Vértices: ',num_vertices)
        #criar grafo completo
        G = nx.complete_graph(num_vertices)
        a = G.edges()
        matriz = []
        for i in range(num_vertices):
            matriz.append([0]*num_vertices)
        for v1,v2 in a:
            n = random.randint(10,100)
            matriz[v1][v2] = n
            matriz[v2][v1] = n
            #atribuição do peso no grafo
            G.edges[v1,v2]['weight']=n

        A = prim.Graph(num_vertices)
        A.graph = matriz
        soma_kruskal=0.
        soma_prim = 0.
        for i in range(1, 11):
            #Kruskal
            start= time.time()
            mst = k.kruskal(G)
            tempo = time.time() - start
            soma_kruskal +=tempo;
            #Prim
            start= time.time()
            parent = A.primMST()
            tempo = time.time() - start
            soma_prim += tempo;

        print("Tempo execução (média) Kruskal: ",soma_kruskal/10,"seconds")
        print("Tempo execução (média) Prim: ",soma_prim/10,"seconds")
        lista_vertices.append(num_vertices)
        lista_media_tempo_kruskal.append(soma_kruskal/10)
        lista_media_tempo_prim.append(soma_prim/10)

    print("Total Time : ", time.time() - tempo_total)
    #lista_media_tempo_kruskal = [0.0, 0.019038701057434083, 0.09688055515289307, 0.20204460620880127, 0.36408224105834963, 0.5703435897827148, 0.8109704971313476, 1.1287214517593385, 1.5362257719039918, 1.8401976108551026]
    #lista_media_tempo_prim = [0.0, 0.006850433349609375, 0.029688572883605956, 0.05000219345092773, 0.09062938690185547, 0.15000734329223633, 0.21719615459442138, 0.287770676612854, 0.37263760566711424, 0.46913900375366213]
    #lista_vertices = [10, 110, 210, 310, 410, 510, 610, 710, 810, 910]
    plt.plot(lista_vertices, lista_media_tempo_prim, label = "Prim's algorithm")
    plt.plot(lista_vertices, lista_media_tempo_kruskal, label = "Kruskal's algorithm")
    plt.legend()
    plt.axis([0, total+10, 0, max(lista_media_tempo_kruskal) * 2])
    plt.ylabel('Tempo de execução (Segundos)')
    plt.xlabel('Número de Vértices')
    plt.title("Comparação de desempenho: Kruskal x Prim (Grafo Completo)")
    plt.savefig('Kruskal x Prim - Grafos completos.png')
    plt.show()

    print("lista de vertices")
    print(lista_vertices)
    print("tempo medio kruskal")
    print(lista_media_tempo_kruskal)
    print("tempo medio prim")
    print(lista_media_tempo_prim)
Example #5
0
    def __init__(self, master=None):
        self.G = nx.Graph()
        self.m = mat() #classe da matriz
        self.list_adj = [] #matriz de adj
        self.k = kr()
        self.p = prim()
        
        self.fontePadrao = ("Arial", "10")
        self.primeiroContainer = Frame(master)
        self.primeiroContainer["pady"] = 10
        self.primeiroContainer.pack()
                
        self.titulo = Label(self.primeiroContainer, text="PROGRAMA DE GRAFOS")
        self.titulo["font"] = ("Arial", "10", "bold")
        self.titulo.pack()
                
        self.segundoContainer = Frame(master)
        self.segundoContainer["padx"] = 20
        self.segundoContainer.pack()
        
        self.titulo = Label(self.segundoContainer, text="Escolha o algoritmo desejado:")
        self.titulo["font"] = ("Arial", "10", "bold")
        self.titulo.pack()
        
        self.space = Frame(master)
        self.space["padx"] = 20
        self.space.pack()
        
        self.space = Label(self.space, text="", font=self.fontePadrao)
        self.space.pack()

        self.terceiroContainer = Frame(master)
        self.terceiroContainer["padx"] = 20
        self.terceiroContainer.pack()
        
        self.prim = Button(self.terceiroContainer)
        self.prim["text"] = "Prim"
        self.prim["font"] = ("Calibri", "8")
        self.prim["width"] = 12
        self.prim["command"] = self.chamaPrim
        self.prim.pack()
        
        self.quartoContainer = Frame(master)
        self.quartoContainer["padx"] = 20
        self.quartoContainer.pack()
        
        self.kruskal = Button(self.quartoContainer)
        self.kruskal["text"] = "Kruskal"
        self.kruskal["font"] = ("Calibri", "8")
        self.kruskal["width"] = 12
        self.kruskal["command"] = self.chamaKruskal
        self.kruskal.pack()
        
        self.quintoContainer = Frame(master)
        self.quintoContainer["padx"] = 20
        self.quintoContainer.pack()
        
        self.dijkstra = Button(self.quintoContainer)
        self.dijkstra["text"] = "Dijkstra"
        self.dijkstra["font"] = ("Calibri", "8")
        self.dijkstra["width"] = 12
        self.dijkstra["command"] = self.chamaDijkstra
        self.dijkstra.pack()
        
        self.sextoContainer = Frame(master)
        self.sextoContainer["pady"] = 20
        self.sextoContainer.pack()
                
        self.mensagem = Label(self.sextoContainer, text="", font=self.fontePadrao)
        self.mensagem.pack()
        
        self.setimoContainer = Frame(master)
        self.setimoContainer["pady"] = 10
        self.setimoContainer.pack()
                
        self.titulo = Label(self.setimoContainer, text="Você quer gerar grafos automáticos ou inserir manualmente?")
        self.titulo["font"] = ("Arial", "10", "bold")
        self.titulo.pack()
        
        self.space1 = Frame(master)
        self.space1["padx"] = 20
        self.space1.pack()
        
        self.space1 = Label(self.space1, text="", font=self.fontePadrao)
        self.space1.pack()
        
        self.oitavoContainer = Frame(master)
        self.oitavoContainer["padx"] = 20
        self.oitavoContainer.pack()
        
        self.gerar = Button(self.oitavoContainer)
        self.gerar["text"] = "Gerar"
        self.gerar["font"] = ("Calibri", "8")
        self.gerar["width"] = 12
        self.gerar["command"] = self.chamaGerar
        self.gerar.pack()
               
        self.space2 = Frame(master)
        self.space2["padx"] = 20
        self.space2.pack()
        
        self.space2 = Label(self.space2, text="", font=self.fontePadrao)
        self.space2.pack()
        
        self.verticeContainer = Frame(master)
        self.verticeContainer["padx"] = 20
        self.verticeContainer.pack()
        
        
        #######################
        
        self.dijk_v_fonteContainer = Frame(master)
        self.dijk_v_fonteContainer["padx"] = 20
        self.dijk_v_fonteContainer.pack()

        #####################
        
        self.dijk_v_destinoContainer = Frame(master)
        self.dijk_v_destinoContainer["padx"] = 20
        self.dijk_v_destinoContainer.pack()
        
        ######################
        
        self.space3 = Frame(master)
        self.space3["padx"] = 20
        self.space3.pack()
        
        self.space3 = Label(self.space3, text="", font=self.fontePadrao)
        self.space3.pack()
        
        self.inserirContainer = Frame(master)
        self.inserirContainer["padx"] = 20
        self.inserirContainer.pack()
        
        self.inserir = Button(self.inserirContainer)
        self.inserir["text"] = "Salva Nº Vértices"
        self.inserir["font"] = ("Calibri", "8")
        self.inserir["width"] = 12
        self.inserir["command"] = self.chamaInserirVert
        self.inserir.pack()
        
        self.space4 = Frame(master)
        self.space4["padx"] = 20
        self.space4.pack()
        
        self.space4 = Label(self.space4, text="", font=self.fontePadrao)
        self.space4.pack()
        
        self.matrizContainer = Frame(master)
        self.matrizContainer["padx"] = 20
        self.matrizContainer.pack()
        
        self.space5 = Frame(master)
        self.space5["padx"] = 20
        self.space5.pack()
        
        self.space5 = Label(self.space5, text="", font=self.fontePadrao)
        self.space5.pack()
        
        self.inserirEContainer = Frame(master)
        self.inserirEContainer["padx"] = 20
        self.inserirEContainer.pack()
        
        self.inserirElemento = Button(self.inserirEContainer)
        self.inserirElemento["text"] = "Abrir Arquivo"
        self.inserirElemento["font"] = ("Calibri", "8")
        self.inserirElemento["width"] = 12
        self.inserirElemento["command"] = self.chamaInserirMatriz
        self.inserirElemento.pack()
        
        self.space6 = Frame(master)
        self.space6["padx"] = 20
        self.space6.pack()
        
        self.space6 = Label(self.space6, text="", font=self.fontePadrao)
        self.space6.pack()
        
        self.verticeLabel = Label(self.verticeContainer,text="N° de vértices: ", font=self.fontePadrao)
        self.verticeLabel.pack(side=TOP)

        self.vertice = Entry(self.verticeContainer)
        self.vertice["width"] = 30
        self.vertice["font"] = self.fontePadrao
        self.vertice.pack(side=BOTTOM)

        
        ###############################
        self.dijk_v_fonteLabel = Label(self.dijk_v_fonteContainer,text="Dijkstra - Vertice Fonte: ", font=self.fontePadrao)
        self.dijk_v_fonteLabel.pack(side=TOP)

        self.dijk_v_fonte = Entry(self.dijk_v_fonteContainer)
        self.dijk_v_fonte["width"] = 30
        self.dijk_v_fonte["font"] = self.fontePadrao
        self.dijk_v_fonte.pack(side=BOTTOM)
        
      
        ##########################
        self.dijk_v_destinoLabel = Label(self.dijk_v_destinoContainer,text="Dijkstra - Vertice Destino: ", font=self.fontePadrao)
        self.dijk_v_destinoLabel.pack(side=TOP)

        self.dijk_v_destino = Entry(self.dijk_v_fonteContainer)
        self.dijk_v_destino["width"] = 30
        self.dijk_v_destino["font"] = self.fontePadrao
        self.dijk_v_destino.pack(side=BOTTOM)
        ##########################
        
        
        self.mzContainer = Frame(master)
        self.mzContainer["padx"] = 20
        self.mzContainer.pack()
        
        self.msg_matriz = Label(self.mzContainer, text="", font=self.fontePadrao)
        self.msg_matriz.pack()
        """