Skip to content

Commit c52bc01

Browse files
authored
Create Kruskal-Algorithm.py
1 parent 66ccbca commit c52bc01

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed

Kruskal-Algorithm.py

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
class Graph:
2+
def __init__(self, vertices):
3+
self.V = vertices
4+
self.edges = []
5+
6+
def add_edge(self, u, v, w):
7+
self.edges.append((w, u, v))
8+
9+
def find(self, parent, i):
10+
if parent[i] != i:
11+
parent[i] = self.find(parent, parent[i])
12+
return parent[i]
13+
14+
def union(self, parent, rank, x, y):
15+
root_x = self.find(parent, x)
16+
root_y = self.find(parent, y)
17+
18+
if root_x != root_y:
19+
if rank[root_x] > rank[root_y]:
20+
parent[root_y] = root_x
21+
elif rank[root_x] < rank[root_y]:
22+
parent[root_x] = root_y
23+
else:
24+
parent[root_y] = root_x
25+
rank[root_x] += 1
26+
27+
def kruskal_mst(self):
28+
self.edges.sort()
29+
parent = []
30+
rank = []
31+
mst = []
32+
33+
for node in range(self.V):
34+
parent.append(node)
35+
rank.append(0)
36+
37+
for edge in self.edges:
38+
w, u, v = edge
39+
root_u = self.find(parent, u)
40+
root_v = self.find(parent, v)
41+
42+
if root_u != root_v:
43+
mst.append(edge)
44+
self.union(parent, rank, root_u, root_v)
45+
46+
if len(mst) == self.V - 1:
47+
break
48+
49+
print("Edges in the Minimum Spanning Tree:")
50+
for weight, u, v in mst:
51+
print(f"{u} -- {v} == {weight}")
52+
53+
g = Graph(4)
54+
g.add_edge(0, 1, 10)
55+
g.add_edge(0, 2, 6)
56+
g.add_edge(0, 3, 5)
57+
g.add_edge(1, 3, 15)
58+
g.add_edge(2, 3, 4)
59+
60+
g.kruskal_mst()

0 commit comments

Comments
 (0)