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()
'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))
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)
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)
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() """