Homework
KRUSKAL’S ALGORITHM EXAMPLE
Step 1 : Choose the edge with the least weight, if there are more than 1,
choose anyone
Step 2 : Choose the next shortest edge and add it
Step 3 : Choose the next shortest edge that doesn't
create a cycle and add it
Homework
Step 4 : Choose the next shortest
edge that doesn't create a cycle
and add it
Step 5 : Repeat until you have a
spanning tree
Homework
PYTHON IMPLEMETATION
# Kruskal's algorithm in Python
class Graph:
def __init__(self, vertices):
self.V = vertices
[Link] = []
def add_edge(self, u, v, w):
[Link]([u, v, w])
# Search function
def find(self, parent, i):
if parent[i] == i:
return i
return [Link](parent, parent[i])
def apply_union(self, parent, rank, x, y):
xroot = [Link](parent, x)
yroot = [Link](parent, y)
if rank[xroot] < rank[yroot]:
parent[xroot] = yroot
elif rank[xroot] > rank[yroot]:
parent[yroot] = xroot
else:
parent[yroot] = xroot
rank[xroot] += 1
# Applying Kruskal algorithm
def kruskal_algo(self):
result = []
i, e = 0, 0
[Link] = sorted([Link], key=lambda item: item[2])
parent = []
rank = []
for node in range(self.V):
[Link](node)
[Link](0)
while e < self.V - 1:
u, v, w = [Link][i]
i = i + 1
x = [Link](parent, u)
y = [Link](parent, v)
if x != y:
e = e + 1
[Link]([u, v, w])
self.apply_union(parent, rank, x, y)
for u, v, weight in result:
print("%d - %d: %d" % (u, v, weight))
Homework
g = Graph(6)
g.add_edge(0, 1, 4)
g.add_edge(0, 2, 4)
g.add_edge(1, 2, 2)
g.add_edge(1, 0, 4)
g.add_edge(2, 0, 4)
g.add_edge(2, 1, 2)
g.add_edge(2, 3, 3)
g.add_edge(2, 5, 2)
g.add_edge(2, 4, 4)
g.add_edge(3, 2, 3)
g.add_edge(3, 4, 3)
g.add_edge(4, 2, 4)
g.add_edge(4, 3, 3)
g.add_edge(5, 2, 2)
g.add_edge(5, 4, 3)
g.kruskal_algo()