Advertisement
Guest User

Untitled

a guest
Dec 5th, 2016
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.27 KB | None | 0 0
  1. parent = dict()
  2. rank = dict()
  3.  
  4. def make_set(vertice):
  5. parent[vertice] = vertice
  6. rank[vertice] = 0
  7.  
  8. def find(vertice):
  9. if parent[vertice] != vertice:
  10. parent[vertice] = find(parent[vertice])
  11. print (vertice)
  12. return parent[vertice]
  13.  
  14. def union(vertice1, vertice2):
  15. root1 = find(vertice1)
  16. root2 = find(vertice2)
  17. if root1 != root2:
  18. if rank[root1] > rank[root2]:
  19. parent[root2] = root1
  20. else:
  21. parent[root1] = root2
  22. if rank[root1] == rank[root2]: rank[root2] += 1
  23.  
  24. def kruskal(graph):
  25. for vertice in graph['vertices']:
  26. make_set(vertice)
  27.  
  28. minimum_spanning_tree = set()
  29. edges = list(graph['edges'])
  30. edges.sort()
  31. for edge in edges:
  32. weight, vertice1, vertice2 = edge
  33. if find(vertice1) != find(vertice2):
  34. union(vertice1, vertice2)
  35. minimum_spanning_tree.add(edge)
  36. return minimum_spanning_tree
  37.  
  38.  
  39.  
  40. graph = {
  41. 'vertices': ['A', 'B', 'C', 'D', 'E', 'F', 'G'],
  42. 'edges': set([
  43. (1, 'A', 'B'),
  44. (3, 'B', 'C'),
  45. (5, 'C', 'D'),
  46. (1, 'A', 'D'),
  47. (3, 'E', 'D'),
  48. (4, 'B', 'E'),
  49. ])
  50. }
  51.  
  52. print (kruskal(graph))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement