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.

45 lines
1.1KB

  1. class Vertex(object):
  2. def __init__(self, index):
  3. self.index = index
  4. self.neighbors = set()
  5. def edgelist(self):
  6. return [set((self.index, n)) for n in self.neighbors]
  7. def __str__(self):
  8. return "{}".format(", ".join(map(str, self.neighbors)))
  9. class GraphRegister(object):
  10. def __init__(self, n):
  11. self.vertices = [Vertex(i) for i in xrange(n)]
  12. def add_edge(self, v1, v2):
  13. self.vertices[v1].neighbors.add(v2)
  14. self.vertices[v2].neighbors.add(v1)
  15. def del_edge(self, v1, v2):
  16. self.vertices[v1].neighbors.remove(v2)
  17. self.vertices[v2].neighbors.remove(v1)
  18. def toggle_edge(self, v1, v2):
  19. if v2 in self.vertices[v1].neighbors:
  20. self.del_edge(v1, v2)
  21. else:
  22. self.add_edge(v1, v2)
  23. def edgelist(self):
  24. return map(tuple, frozenset(frozenset((v.index, n))
  25. for v in self.vertices
  26. for n in v.neighbors))
  27. def __str__(self, ):
  28. return "\n".join(str(v) for v in self.vertices if len(v.neighbors) > 0)
  29. if __name__ == '__main__':
  30. g = GraphRegister(10)
  31. g.toggle_edge(0, 1)
  32. print g