Skip to content

Commit 3a4c639

Browse files
committed
Kruskals algorithm add edges sorting
1 parent 4f76752 commit 3a4c639

File tree

3 files changed

+30
-7
lines changed

3 files changed

+30
-7
lines changed
Binary file not shown.

graphs/minimum-spanning-tree/kruskals-algorithm/graph.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,25 @@ def find_root(vertex: Vertex = None) -> Vertex:
55
vertex = vertex.root
66
return vertex
77

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+
827

928
class Graph:
1029
def __init__(self):
@@ -18,9 +37,13 @@ def add_edge(self, vertex_1_label: str = None, vertex_2_label: str = None, weigh
1837
if vertex_1_label not in self.vertices or vertex_2_label not in self.vertices:
1938
raise Exception("Invalid label name")
2039
self.edges.append([vertex_1_label, vertex_2_label, weight])
40+
self.edges.append([vertex_2_label, vertex_1_label, weight])
2141

2242
def kruskal(self):
43+
print(self.edges)
2344
# sort edges by weight increasingly
45+
self.edges = sort_edges_by_weight_increasingly(self.edges)
46+
print(self.edges)
2447
minimum_spanning_tree: list = []
2548
for edge_list in self.edges:
2649
vertex_one: Vertex = self.vertices[edge_list[0]]

graphs/minimum-spanning-tree/kruskals-algorithm/main.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,14 @@
99
g.add_vertex('e')
1010
g.add_vertex('f')
1111

12-
g.add_edge('a', 'f')
13-
g.add_edge('a', 'b')
12+
g.add_edge('a', 'f', 4)
13+
g.add_edge('a', 'b', 23)
1414

15-
g.add_edge('b', 'd')
16-
g.add_edge('b', 'c')
17-
g.add_edge('c', 'd')
15+
g.add_edge('b', 'd', 17)
16+
g.add_edge('b', 'c', 3)
17+
g.add_edge('c', 'd', 41)
1818

19-
g.add_edge('c', 'f')
20-
g.add_edge('f', 'e')
19+
g.add_edge('c', 'f', 2)
20+
g.add_edge('f', 'e', 1)
2121

2222
g.kruskal()

0 commit comments

Comments
 (0)