Skip to content

Commit 4611dcb

Browse files
Added Prim’s minimum spanning tree algorithm bhavinjawade#8
Added Prim’s minimum spanning tree algorithm for issue bhavinjawade#8
1 parent a42718b commit 4611dcb

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed

Prims_Algorithm.py

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
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

Comments
 (0)