Advertisement
Guest User

Programa Principal

a guest
Nov 21st, 2014
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.51 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Sun Nov 16 19:29:27 2014
  4.  
  5. @author: yukioshibata
  6.  
  7. Descrição: Esse programa, a partir de uma matriz de adjacência em um arquivo .txt, utilizando o algoritmo de
  8. Dijkstra, plota na tela um caminho mínimo, caso o  .
  9.  
  10. Entradas: G - Grafo conexo
  11.          w - Matriz de pesos do grafo G
  12.          r - Lista de inteiros contendo as raízes
  13.  
  14. Saída: Retorna a quantidade de caminhos mínimos referente às raízes fornecidas como parâmetros.
  15.  
  16. """
  17.  
  18. import numpy as np
  19. import networkx as nx
  20. import matplotlib.pyplot as plt
  21. import matplotlib.colors as colors
  22.  
  23. from weight_print import plot_weighted_graph
  24. from dijkstra import Dijkstra as dijkstra
  25.  
  26. a = np.loadtxt('matriz332.txt')
  27.  
  28. #Obtém as coordenadas em que o peso é "não-nulo"
  29. rows, cols = np.where(a>0)
  30.  
  31. #Cria lista de arestas
  32. edges = zip(rows.tolist(), cols.tolist())
  33.  
  34. #Cria um grafo vazio usando NetworkX
  35. g = nx.Graph()
  36.  
  37. #Insere arestas (cria vértices automaticamente)
  38. g.add_edges_from(edges)
  39.  
  40. #Mostra vértices e arestas
  41. g.nodes()
  42. g.edges()
  43.  
  44. #w = matriz de pesos
  45. w = [map(float, line.split()) for line in file('matriz332.txt') if line.strip()]
  46.  
  47. #l = lista de pesos dos vértices e p = lista de predecessores de cada vértice
  48. l, p = dijkstra(g, a, [0, 3, 6, 15, 26]) #"""Vértices próximos"""
  49.  
  50. print l
  51. print p
  52.  
  53. #Cria um grafo vazio 'e' com todos os pesos das arestas
  54. e = nx.Graph()
  55.  
  56. for v in range(len(l)):
  57.     if l[v] != 0:
  58.         e.add_edge(v, p[v], weight = l[v])
  59.  
  60. plot_weighted_graph(e)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement