Advertisement
Guest User

Untitled

a guest
May 23rd, 2019
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.77 KB | None | 0 0
  1.  
  2. from collections import defaultdict
  3. # Part of Cosmos by OpenGenus Foundation
  4. class Graph:
  5. def __init__(self,vertices):
  6. self.V= vertices
  7. self.graph = []
  8. def addEdge(self,u,v,w):
  9. self.graph.append([u,v,w])
  10. def find(self, parent, i):
  11. if parent[i] == i:
  12. return i
  13. return self.find(parent, parent[i])
  14. def union(self, parent, rank, x, y):
  15. xroot = self.find(parent, x)
  16. yroot = self.find(parent, y)
  17. if rank[xroot] < rank[yroot]:
  18. parent[xroot] = yroot
  19. elif rank[xroot] > rank[yroot]:
  20. parent[yroot] = xroot
  21. else :
  22. parent[yroot] = xroot
  23. rank[xroot] += 1
  24. def KruskalMST(self):
  25. result =[]
  26. i,e = 0,0
  27. self.graph = sorted(self.graph,key=lambda item: item[2])
  28. parent = [] ; rank = []
  29. for node in range(self.V):
  30. parent.append(node)
  31. rank.append(0)
  32. while e < self.V -1 :
  33. u,v,w = self.graph[i]
  34. i = i + 1
  35. x = self.find(parent, u)
  36. y = self.find(parent ,v)
  37. if x != y:
  38. e = e + 1
  39. result.append([u,v,w])
  40. self.union(parent, rank, x, y)
  41. print("Constructed MST :")
  42. print("Vertex A Vertex B Weight")
  43. for u,v,weight in result:
  44. print (" %d %d %d" % (u,v,weight))
  45. #vetx = int(input("Enter no. of vertices :"))
  46. eegde = int(input("Enter no. of edges :"))
  47. g = Graph(eegde-1)
  48. print("For each edge input (Source vertex , Destination vertex , Weight of the edge ) :")
  49. for x in range(eegde):
  50. qq,xx,yy = map(int,input().split(" "))
  51. g.addEdge(qq, xx, yy)
  52. g.KruskalMST()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement