@@ -5,6 +5,25 @@ def find_root(vertex: Vertex = None) -> Vertex:
5
5
vertex = vertex .root
6
6
return vertex
7
7
8
+ def sort_edges_by_weight_increasingly (edges : list ) -> list :
9
+ # edges [[label1, label2, weight], [label1, label2, weight]]
10
+ if len (edges ) < 2 :
11
+ return edges
12
+
13
+ pivot_index : int = len (edges ) // 2
14
+ pivot_value = edges [pivot_index ][2 ]
15
+ left_list : list = []
16
+ right_list : list = []
17
+ for i in range (len (edges )):
18
+ if i != pivot_index :
19
+ if edges [i ][2 ] < pivot_value :
20
+ left_list .append (edges [i ])
21
+ else :
22
+ right_list .append (edges [i ])
23
+
24
+ return sort_edges_by_weight_increasingly (left_list ) + [edges [pivot_index ]] + sort_edges_by_weight_increasingly (right_list )
25
+
26
+
8
27
9
28
class Graph :
10
29
def __init__ (self ):
@@ -18,9 +37,13 @@ def add_edge(self, vertex_1_label: str = None, vertex_2_label: str = None, weigh
18
37
if vertex_1_label not in self .vertices or vertex_2_label not in self .vertices :
19
38
raise Exception ("Invalid label name" )
20
39
self .edges .append ([vertex_1_label , vertex_2_label , weight ])
40
+ self .edges .append ([vertex_2_label , vertex_1_label , weight ])
21
41
22
42
def kruskal (self ):
43
+ print (self .edges )
23
44
# sort edges by weight increasingly
45
+ self .edges = sort_edges_by_weight_increasingly (self .edges )
46
+ print (self .edges )
24
47
minimum_spanning_tree : list = []
25
48
for edge_list in self .edges :
26
49
vertex_one : Vertex = self .vertices [edge_list [0 ]]
0 commit comments