1
1
from node import Node
2
- class Graph :
2
+ from graph import Graph
3
+
4
+ class EdgeListGraph (Graph ):
3
5
###################################
4
6
# Constructor
5
7
###################################
@@ -55,6 +57,9 @@ def __str__(self):
55
57
out += "edge " + str (i + 1 ) + ": " + str (self .m_graph [i ]) + "\n "
56
58
return out
57
59
60
+ ###################################
61
+ # Find node in a graph using its name
62
+ ###################################
58
63
def get_node_by_name (self , name ):
59
64
search_node = Node (name )
60
65
for node in self .m_nodes :
@@ -99,9 +104,7 @@ def kruskals_mst(self):
99
104
# Add zero to the `subtree_sizes` array
100
105
# => initialize `parent` and `subtree_sizes`
101
106
for node in self .m_nodes :
102
- print (str (node ) + " id is " + str (node .get_id ()))
103
107
parent [node .get_id ()] = node
104
- # subtree_sizes.append(0)
105
108
106
109
# Sort edges by weight
107
110
sorted_graph = sorted (self .m_graph , key = lambda item : item [2 ])
@@ -110,10 +113,8 @@ def kruskals_mst(self):
110
113
# the number of edges is equal to the number of nodes minus 1
111
114
while e < (self .m_num_of_nodes - 1 ):
112
115
# Pick an edge with the minimum weight at the moment
113
- # print(str(i) + ": " + str(sorted_graph[i]))
114
116
node1 , node2 , weight = sorted_graph [i ]
115
117
i = i + 1
116
- print (node1 , node1 .get_id ())
117
118
x = self .find_subtree (parent , node1 )
118
119
y = self .find_subtree (parent , node2 )
119
120
if x != y :
@@ -159,8 +160,8 @@ def boruvkas_mst(self):
159
160
160
161
cheapest_edge = [- 1 ] * self .m_num_of_nodes
161
162
162
- for vertex in range ( self .m_num_of_nodes ) :
163
- self .m_components .update ({vertex : vertex })
163
+ for node in self .m_nodes :
164
+ self .m_components .update ({node . get_name () : vertex })
164
165
component_size .append (1 )
165
166
166
167
num_of_components = self .m_num_of_nodes
@@ -207,11 +208,6 @@ def boruvkas_mst(self):
207
208
print ("The weight of MST is " + str (mst_weight ))
208
209
209
210
210
-
211
-
212
-
213
-
214
-
215
211
# graph = Graph(5)
216
212
217
213
# graph.add_edge('A', 'A', 25)
@@ -230,26 +226,67 @@ def boruvkas_mst(self):
230
226
# graph.add_edge(4, 2, 7)
231
227
# graph.add_edge(4, 3, 11)
232
228
233
- graph = Graph (9 )
234
- graph .add_edge ("A" , "B" , 4 )
235
- graph .add_edge ("A" , "C" , 7 )
236
- graph .add_edge ("B" , "C" , 11 )
237
- graph .add_edge ("B" , "D" , 9 )
238
- graph .add_edge ("B" , "F" , 20 )
239
- graph .add_edge ("C" , "F" , 1 )
240
- graph .add_edge ("D" , "G" , 6 )
241
- graph .add_edge ("D" , "E" , 2 )
242
- graph .add_edge ("E" , "G" , 10 )
243
- graph .add_edge ("E" , "I" , 15 )
244
- graph .add_edge ("E" , "H" , 5 )
245
- graph .add_edge ("E" , "F" , 1 )
246
- graph .add_edge ("F" , "H" , 3 )
247
- graph .add_edge ("G" , "I" , 5 )
248
- graph .add_edge ("H" , "I" , 12 )
249
-
250
-
251
- # print(graph)
252
-
253
- graph .kruskals_mst ()
254
-
255
-
229
+ ###################################
230
+ # Kruskal qith letter nodes
231
+ #
232
+ # graph = EdgeListGraph(9)
233
+ #
234
+ # graph.add_edge("A", "B", 4)
235
+ # graph.add_edge("A", "C", 7)
236
+ # graph.add_edge("B", "C", 11)
237
+ # graph.add_edge("B", "D", 9)
238
+ # graph.add_edge("B", "F", 20)
239
+ # graph.add_edge("C", "F", 1)
240
+ # graph.add_edge("D", "G", 6)
241
+ # graph.add_edge("D", "E", 2)
242
+ # graph.add_edge("E", "G", 10)
243
+ # graph.add_edge("E", "I", 15)
244
+ # graph.add_edge("E", "H", 5)
245
+ # graph.add_edge("E", "F", 1)
246
+ # graph.add_edge("F", "H", 3)
247
+ # graph.add_edge("G", "I", 5)
248
+ # graph.add_edge("H", "I", 12)
249
+ #
250
+ # graph.kruskals_mst()
251
+ ###################################
252
+
253
+ ###################################
254
+ # Kruskal qith letter nodes
255
+ #
256
+ # graph = EdgeListGraph(9)
257
+
258
+ # graph.add_edge(0, 1, 4)
259
+ # graph.add_edge(0, 2, 7)
260
+ # graph.add_edge(1, 2, 11)
261
+ # graph.add_edge(1, 3, 9)
262
+ # graph.add_edge(1, 5, 20)
263
+ # graph.add_edge(2, 5, 1)
264
+ # graph.add_edge(3, 6, 6)
265
+ # graph.add_edge(3, 4, 2)
266
+ # graph.add_edge(4, 6, 10)
267
+ # graph.add_edge(4, 8, 15)
268
+ # graph.add_edge(4, 7, 5)
269
+ # graph.add_edge(4, 5, 1)
270
+ # graph.add_edge(5, 7, 3)
271
+ # graph.add_edge(6, 8, 5)
272
+ # graph.add_edge(7, 8, 12)
273
+ #
274
+ # graph.kruskals_mst()
275
+ ###################################
276
+
277
+ g = EdgeListGraph (9 )
278
+ g .add_edge (0 , 1 , 4 )
279
+ g .add_edge (0 , 6 , 7 )
280
+ g .add_edge (1 , 6 , 11 )
281
+ g .add_edge (1 , 7 , 20 )
282
+ g .add_edge (1 , 2 , 9 )
283
+ g .add_edge (2 , 3 , 6 )
284
+ g .add_edge (2 , 4 , 2 )
285
+ g .add_edge (3 , 4 , 10 )
286
+ g .add_edge (3 , 5 , 5 )
287
+ g .add_edge (4 , 5 , 15 )
288
+ g .add_edge (4 , 7 , 1 )
289
+ g .add_edge (4 , 8 , 5 )
290
+ g .add_edge (5 , 8 , 12 )
291
+
292
+ g .boruvkas_mst ()
0 commit comments