1
+ from dataclasses import dataclass , field
2
+ @dataclass (eq = False )
3
+ class Node :
4
+ idnum : int
5
+ @dataclass
6
+ class Graph :
7
+ source : int
8
+ adjlist : dict
9
+ def PrimsMST (self ):
10
+ priority_queue = { Node (self .source ) : 0 }
11
+ added = [False ] * len (self .adjlist )
12
+ min_span_tree_cost = 0
13
+ while priority_queue :
14
+ node = min (priority_queue , key = priority_queue .get )
15
+ cost = priority_queue [node ]
16
+ del priority_queue [node ]
17
+ if added [node .idnum ] == False :
18
+ min_span_tree_cost += cost
19
+ added [node .idnum ] = True
20
+ print ("Node added: " + str (node .idnum ) + ",cost: " + str (min_span_tree_cost ))
21
+ for item in self .adjlist [node .idnum ] :
22
+ adjnode = item [0 ]
23
+ adjcost = item [1 ]
24
+ if added [adjnode ] == False :
25
+ priority_queue [Node (adjnode )] = adjcost
26
+ return min_span_tree_cost
27
+ def main () :
28
+ g1_edges_from_node = {}
29
+ g1_edges_from_node [0 ] = [ (1 ,1 ), (2 ,2 ), (3 ,1 ), (4 ,1 ), (5 ,2 ), (6 ,1 ) ]
30
+ g1_edges_from_node [1 ] = [ (0 ,1 ), (2 ,2 ), (6 ,2 ) ]
31
+ g1_edges_from_node [2 ] = [ (0 ,2 ), (1 ,2 ), (3 ,1 ) ]
32
+ g1_edges_from_node [3 ] = [ (0 ,1 ), (2 ,1 ), (4 ,2 ) ]
33
+ g1_edges_from_node [4 ] = [ (0 ,1 ), (3 ,2 ), (5 ,2 ) ]
34
+ g1_edges_from_node [5 ] = [ (0 ,2 ), (4 ,2 ), (6 ,1 ) ]
35
+ g1_edges_from_node [6 ] = [ (0 ,1 ), (2 ,2 ), (5 ,1 ) ]
36
+
37
+ g1 = Graph (0 , g1_edges_from_node )
38
+ cost = g1 .PrimsMST ()
39
+ print ("Cost of the minimum spanning tree in graph 1 : " + str (cost ) + "\n " )
40
+ g2_edges_from_node = {}
41
+ g2_edges_from_node [0 ] = [ (1 ,4 ), (2 ,1 ), (3 ,5 ) ];
42
+ g2_edges_from_node [1 ] = [ (0 ,4 ), (3 ,2 ), (4 ,3 ), (5 ,3 ) ];
43
+ g2_edges_from_node [2 ] = [ (0 ,1 ), (3 ,2 ), (4 ,8 ) ];
44
+ g2_edges_from_node [3 ] = [ (0 ,5 ), (1 ,2 ), (2 ,2 ), (4 ,1 ) ];
45
+ g2_edges_from_node [4 ] = [ (1 ,3 ), (2 ,8 ), (3 ,1 ), (5 ,3 ) ];
46
+ g2_edges_from_node [5 ] = [ (1 ,3 ), (4 ,3 ) ];
47
+ g2 = Graph (0 , g2_edges_from_node )
48
+ cost = g2 .PrimsMST ()
49
+ print ("Cost of the minimum spanning tree in graph 1 : " + str (cost ))
50
+ if __name__ == "__main__" :
51
+ main ()
0 commit comments