Anders and Briegel in Python
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

58 lines
1.5KB

  1. import networkx as nx
  2. from matplotlib import pyplot as plt
  3. vop_colors = ["red", "green", "blue"]
  4. class Graph(object):
  5. def __init__(self, n):
  6. self.neighbours = [set() for i in xrange(n)]
  7. self.vops = [0 for i in xrange(n)]
  8. def add_edge(self, v1, v2):
  9. self.neighbours[v1].add(v2)
  10. self.neighbours[v2].add(v1)
  11. def del_edge(self, v1, v2):
  12. self.neighbours[v1].remove(v2)
  13. self.neighbours[v2].remove(v1)
  14. def has_edge(self, v1, v2):
  15. return v2 in self.neighbours[v1]
  16. def toggle_edge(self, v1, v2):
  17. if self.has_edge(v1, v2):
  18. self.del_edge(v1, v2)
  19. else:
  20. self.add_edge(v1, v2)
  21. def edgelist(self):
  22. edges = frozenset(frozenset((i, n))
  23. for i, v in enumerate(self.neighbours)
  24. for n in v)
  25. return [tuple(e) for e in edges]
  26. def draw(self, filename="out.pdf", ns=500):
  27. g = nx.from_edgelist(self.edgelist())
  28. pos = nx.spring_layout(g)
  29. colors = [vop_colors[vop] for vop in self.vops]
  30. nx.draw_networkx_nodes(g, pos, node_color="white", node_size=ns)
  31. nx.draw_networkx_nodes(g, pos, node_color=colors, node_size=ns, alpha=.4)
  32. nx.draw_networkx_labels(g, pos)
  33. nx.draw_networkx_edges(g, pos)
  34. plt.axis('off')
  35. plt.savefig(filename)
  36. if __name__ == '__main__':
  37. g = Graph(10)
  38. g.add_edge(0, 1)
  39. g.add_edge(1, 3)
  40. g.add_edge(3, 2)
  41. g.add_edge(3, 0)
  42. g.add_edge(2, 0)
  43. print g.edgelist()
  44. g.draw()