File tree Expand file tree Collapse file tree
Python/algorithms/graph_algorithms Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ class DisjointSet :
2+ def __init__ (self , n ):
3+ self .parent = list (range (n ))
4+ self .rank = [0 ] * n
5+
6+ def find (self , u ):
7+ if self .parent [u ] != u :
8+ self .parent [u ] = self .find (self .parent [u ]) # Path compression
9+ return self .parent [u ]
10+
11+ def union (self , u , v ):
12+ rootU = self .find (u )
13+ rootV = self .find (v )
14+ if rootU != rootV :
15+ if self .rank [rootU ] < self .rank [rootV ]:
16+ self .parent [rootU ] = rootV
17+ elif self .rank [rootU ] > self .rank [rootV ]:
18+ self .parent [rootV ] = rootU
19+ else :
20+ self .parent [rootV ] = rootU
21+ self .rank [rootU ] += 1
22+ return True
23+ return False
24+
25+ class Graph :
26+ def __init__ (self , vertices ):
27+ self .V = vertices
28+ self .edges = [] # Each edge: (weight, u, v)
29+
30+ def add_edge (self , u , v , w ):
31+ self .edges .append ((w , u , v ))
32+
33+ def kruskal (self ):
34+ self .edges .sort ()
35+ ds = DisjointSet (self .V )
36+ mst = []
37+ total_weight = 0
38+
39+ for w , u , v in self .edges :
40+ if ds .union (u , v ): # If no cycle formed
41+ mst .append ((u , v , w ))
42+ total_weight += w
43+
44+ print ("Edges in the MST:" )
45+ for u , v , w in mst :
46+ print (f"{ u } -- { v } == { w } " )
47+ print ("Total weight of MST:" , total_weight )
48+
49+ # Example usage:
50+ if __name__ == "__main__" :
51+ g = Graph (6 )
52+ g .add_edge (0 , 1 , 4 )
53+ g .add_edge (0 , 2 , 4 )
54+ g .add_edge (1 , 2 , 2 )
55+ g .add_edge (1 , 0 , 4 )
56+ g .add_edge (2 , 0 , 4 )
57+ g .add_edge (2 , 1 , 2 )
58+ g .add_edge (2 , 3 , 3 )
59+ g .add_edge (2 , 5 , 2 )
60+ g .add_edge (2 , 4 , 4 )
61+ g .add_edge (3 , 2 , 3 )
62+ g .add_edge (3 , 4 , 3 )
63+ g .add_edge (4 , 2 , 4 )
64+ g .add_edge (4 , 3 , 3 )
65+ g .add_edge (5 , 2 , 2 )
66+ g .add_edge (5 , 4 , 3 )
67+
68+ g .kruskal ()
You can’t perform that action at this time.
0 commit comments