Skip to content

Commit 5f10396

Browse files
committed
Added weighted graph with Kruskal's minimum spanning tree algorithm
1 parent bd1f12c commit 5f10396

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

data-structures/WeightedGraph.py

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
from DisjointSet import ForestOfTrees
2+
3+
4+
def take_weight(elem):
5+
return elem[2]
6+
7+
8+
class WeightedGraph:
9+
def __init__(self):
10+
self.vertices = []
11+
self.edges = []
12+
13+
def add_vertex(self, number):
14+
self.vertices.append(number)
15+
16+
def add_edge(self, start, end, weight):
17+
self.edges.append((start, end, weight))
18+
19+
def kruskal(self):
20+
ans = []
21+
forest = ForestOfTrees()
22+
for vert in self.vertices:
23+
forest.make_set(vert)
24+
edges = sorted(self.edges, key=take_weight)
25+
print(edges)
26+
for edge in edges:
27+
if forest.find_set(edge[0]) != forest.find_set(edge[1]):
28+
ans.append((edge[0], edge[1]))
29+
forest.union(edge[0], edge[1])
30+
return ans
31+
32+
33+
if __name__ == "__main__":
34+
g = WeightedGraph()
35+
for i in range(7):
36+
g.add_vertex(i)
37+
g.add_edge(0, 1, 4)
38+
g.add_edge(1, 2, 10)
39+
g.add_edge(1, 3, 6)
40+
g.add_edge(2, 3, 8)
41+
g.add_edge(2, 5, 7)
42+
g.add_edge(3, 4, 9)
43+
g.add_edge(4, 5, 5)
44+
g.add_edge(5, 6, 3)
45+
print(g.kruskal())

0 commit comments

Comments
 (0)