File tree 1 file changed +45
-0
lines changed
1 file changed +45
-0
lines changed Original file line number Diff line number Diff line change
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 ())
You can’t perform that action at this time.
0 commit comments