• Source
    1.  
    2. def cria(G, pesos, pos):
    3.  
    4. """
    5. Descrição
    6. mesma funçao de plot_weighted_graph, mas nao eh necessario calcular
    7. os pesos das arestas, que ja foram definidos em plot_weighted_graph
    8. e agora serão reutilizados.
    9. tambem são reaproveitados as posiçoes dos vertices e arestas
    10. definidas na outra função
    11. """
    12. plt.figure();
    13.  
    14. # plotar vertices
    15. nx.draw_networkx_nodes(G, pos);
    16. # plotar rótulos dos vertices
    17. nx.draw_networkx_labels(G, pos);
    18. # plotar arestas
    19. nx.draw_networkx_edges(G, pos);
    20.  
    21.  
    22. # plotar rótulos das arestas
    23. nx.draw_networkx_edge_labels(
    24. G, pos, edge_labels=pesos, font_size=10, font_family='sans-serif');
    25. # plotar G
    26. plt.show();
    27.  
    28.  
    29.  
    30. a = np.loadtxt('cidades2.txt')
    31.  
    32. # Obtem as coordenadas em que o peso é não-nulo
    33. rows, cols = np.where(a>0)
    34.  
    35. # Cria lista de arestas
    36. edges = zip(rows.tolist(), cols.tolist())
    37.  
    38. # Cria um grafo vazio usando NetworkX
    39. g = nx.Graph()
    40.  
    41. # Insere arestas (cria vértices automaticamente)
    42. g.add_edges_from(edges)
    43.  
    44.  
    45.  
    46. # Mostra vértices e arestas
    47.  
    48.  
    49. x, pos = Prim_Algorithm(g, 1, a)
    50. # x = MST, pos = posiçao definitiva dos vertices e arestas
    51.  
    52.  
    53. pesos = { (u, v): data['weight'] for u, v, data in x.edges(data=True) }
    54. #dicionario com os pesos das arestas da MST
    55.  
    56.  
    57. p_ordenado = sorted(pesos.items(), key=operator.itemgetter(1))
    58. # transforma em lista e ordena as arestas do menor para maior peso
    59.  
    60. #gera com 4 comudidades
    61. #for x in range(1, 4):
    62. # gera 3 comunidades
    63. for x in range(1, 3):
    64. # com tres grupos: range(1, 3) ---- com quatro grupos: range(1, 4)
    65. del p_ordenado[len(p_ordenado) -1]
    66. # retira as k arestas mais custosas
    67.  
    68. d = dict(p_ordenado)
    69. # transforma novamente em dicionario após retirar as arestas
    70.  
    71. grafo = nx.Graph()
    72. grafo.add_edges_from(d)
    73. cria(grafo, d, pos)
    74. # esse eh o grafo em que estão mostrados os grupos