digraph.py 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. #!/usr/bin/python
  2. # -*- coding=utf-8 -*-
  3. # @Create Time: 2024-02-05 09:53:01
  4. # @Last Modified time: 2024-02-21 13:09:15
  5. class Digraph:
  6. def __init__(self, num):
  7. self.num_vertices = num
  8. self.num_edges = 0
  9. self.adj_list = [[] for _ in range(num)]
  10. def count_vertices(self):
  11. return self.num_vertices
  12. def count_edges(self):
  13. return self.num_edges
  14. def point_edge(self, x, y):
  15. self.adj_list[x].append(y)
  16. def point_to_vertices(self, x):
  17. return self.adj_list[x]
  18. def reverse_digraph(self):
  19. rvs_digraph = Digraph(self.num_vertices)
  20. for index, queue in enumerate(self.adj_list):
  21. for v in queue:
  22. rvs_digraph.point_edge(v, index)
  23. return rvs_digraph
  24. if __name__ == '__main__':
  25. graph = Digraph(5)
  26. graph.point_edge(1, 2)
  27. graph.point_edge(2, 3)
  28. graph.point_edge(3, 4)
  29. graph.point_edge(2, 4)
  30. print(graph.point_to_vertices(2))
  31. print(graph.reverse_digraph().point_to_vertices(2))