Advertisement
Guest User

Test Grafo

a guest
Nov 5th, 2010
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.62 KB | None | 0 0
  1. #! /usr/bin/env python
  2. #coding=utf-8
  3.  
  4. import math
  5.  
  6. import networkx as nx
  7. import matplotlib.pyplot as plt
  8.  
  9. class Nodo(object):
  10.     def __init__(self, id, x=None, y=None):
  11.         self.id = id
  12.         self.tipo = None
  13.         self.x = x
  14.         self.y = y
  15.  
  16.     def __eq__(self, otro_nodo):
  17.         if otro_nodo is None:
  18.             return False
  19.         return self.x == otro_nodo.x and self.y == otro_nodo.y
  20.  
  21.     #def __eq__(self, otro_nodo):
  22.     #    if otro_nodo is None:
  23.     #        return False
  24.     #    return self.id == otro_nodo.id
  25.  
  26.     def __hash__(self):
  27.         return hash((self.x, self.y))
  28.  
  29.     #def __hash__(self):
  30.     #    return self.id
  31.  
  32. class NodoSimple(Nodo):
  33.     def __init__(self, id, x, y):
  34.         Nodo.__init__(self, id, x, y)
  35.         self._incidencia = []
  36.         self.tipo = 1
  37.  
  38.  
  39. class Grafo(nx.Graph):
  40.     def obtener_nodos_simples(self):
  41.         return [x for x in self.nodes_iter() if x.tipo==1]
  42.  
  43.  
  44. class GestorGrafo(object):
  45.     def __init__(self):
  46.         self._grafo = Grafo()
  47.  
  48.     def _agregar_nodos_simples(self):
  49.         archivo = open('grafo.csv', 'r')
  50.  
  51.         for n, r in enumerate(archivo):
  52.             r = r.strip('\n').split(',')
  53.             nodo1 = NodoSimple(int(r[2]),
  54.                     float(r[3]),
  55.                     float(r[4]))
  56.             nodo2 = NodoSimple(int(r[5]),
  57.                     float(r[6]),
  58.                     float(r[7]))
  59.  
  60.             self._grafo.add_edge(nodo1,
  61.                     nodo2,
  62.                     segmento=int(r[1]),
  63.                     weight=100)
  64.         archivo.close()
  65.  
  66.     def construir_grafo(self):
  67.         self._agregar_nodos_simples()
  68.         #self._agregar_nodos_incidentes()
  69.  
  70.     def calcular(self):
  71.         self._grafo.calcular_incidencias()
  72.  
  73.     def graficar(self):
  74.         pos = nx.spring_layout(self._grafo)
  75.         nx.draw_networkx_nodes(self._grafo,
  76.                 pos=pos,
  77.                 node_size=300,
  78.                 nodelist=self._grafo.obtener_nodos_simples())
  79.  
  80.         nx.draw_networkx_edges(self._grafo, pos=pos, alpha=0.5, width=3)
  81.         plt.show()
  82.  
  83.     def arcos(self):
  84.         for e in self._grafo.edges_iter():
  85.             nodo1 = e[0]
  86.             nodo2 = e[1]
  87.             print 'arco %d-%d ->'%(nodo1.id, nodo2.id), nodo1.id, id(nodo1), nodo2.id, id(nodo2)
  88.  
  89.     def nodos_simples(self):
  90.         for n in self._grafo.obtener_nodos_simples():
  91.             print n.id, id(n)
  92.  
  93.  
  94. def main():
  95.     gestor_grafo = GestorGrafo()
  96.     gestor_grafo.construir_grafo()
  97.     #gestor_grafo.calcular()
  98.     #gestor_grafo.graficar()
  99.     gestor_grafo.nodos_simples()
  100.     gestor_grafo.arcos()
  101.  
  102.  
  103. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement