Skip to content

Commit d6e752b

Browse files
Merge pull request codemistic#603 from Lokesh-Choudhary/patch-2
Kruskal's_Algorithm.py
2 parents c361e9c + e35fca6 commit d6e752b

File tree

1 file changed

+69
-0
lines changed

1 file changed

+69
-0
lines changed

Python/Kruskal's_Algorithm.py

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
# Kruskal's algorithm in Python
2+
3+
4+
class Graph:
5+
def __init__(self, vertices):
6+
self.V = vertices
7+
self.graph = []
8+
9+
def add_edge(self, u, v, w):
10+
self.graph.append([u, v, w])
11+
12+
# Search function
13+
14+
def find(self, parent, i):
15+
if parent[i] == i:
16+
return i
17+
return self.find(parent, parent[i])
18+
19+
def apply_union(self, parent, rank, x, y):
20+
xroot = self.find(parent, x)
21+
yroot = self.find(parent, y)
22+
if rank[xroot] < rank[yroot]:
23+
parent[xroot] = yroot
24+
elif rank[xroot] > rank[yroot]:
25+
parent[yroot] = xroot
26+
else:
27+
parent[yroot] = xroot
28+
rank[xroot] += 1
29+
30+
# Applying Kruskal algorithm
31+
def kruskal_algo(self):
32+
result = []
33+
i, e = 0, 0
34+
self.graph = sorted(self.graph, key=lambda item: item[2])
35+
parent = []
36+
rank = []
37+
for node in range(self.V):
38+
parent.append(node)
39+
rank.append(0)
40+
while e < self.V - 1:
41+
u, v, w = self.graph[i]
42+
i = i + 1
43+
x = self.find(parent, u)
44+
y = self.find(parent, v)
45+
if x != y:
46+
e = e + 1
47+
result.append([u, v, w])
48+
self.apply_union(parent, rank, x, y)
49+
for u, v, weight in result:
50+
print("%d - %d: %d" % (u, v, weight))
51+
52+
53+
g = Graph(6)
54+
g.add_edge(0, 1, 4)
55+
g.add_edge(0, 2, 4)
56+
g.add_edge(1, 2, 2)
57+
g.add_edge(1, 0, 4)
58+
g.add_edge(2, 0, 4)
59+
g.add_edge(2, 1, 2)
60+
g.add_edge(2, 3, 3)
61+
g.add_edge(2, 5, 2)
62+
g.add_edge(2, 4, 4)
63+
g.add_edge(3, 2, 3)
64+
g.add_edge(3, 4, 3)
65+
g.add_edge(4, 2, 4)
66+
g.add_edge(4, 3, 3)
67+
g.add_edge(5, 2, 2)
68+
g.add_edge(5, 4, 3)
69+
g.kruskal_algo()

0 commit comments

Comments
 (0)