def prim(graph, start_node): queue = PriorityQueue() parent = {} mst = [] mst_sum = 0 for node in graph.get_nodes(): queue.add_task(task=node, priority=float('Inf')) parent[node] = None # put first node in the queue queue.add_task(task=start_node, priority=0) while queue.not_empty(): cheapest_node = queue.pop_task() if parent[cheapest_node] is not None: temp_weight = float(graph.get_default_weights((cheapest_node, parent[cheapest_node]))[0]) mst.append((temp_weight, (cheapest_node, parent[cheapest_node]))) mst_sum += temp_weight for adj_node in graph.get_node_neighbours(cheapest_node): edge_weight = float(graph.get_default_weights((cheapest_node, adj_node))[0]) if queue.contains_task(adj_node) and edge_weight < queue.get_priority(adj_node): parent[adj_node] = cheapest_node queue.add_task(task=adj_node, priority=edge_weight) print "Prim Weight: ", mst_sum return mst