input = Graph graph initialize edges as PriorityQueue, mst as List call populatePriorityQueue(graph, edges) call labelVertices(graph) while mst.length() < (graph.vertices.length() - 1) initialize forest as List, secondForest as List, edge as Edge edge = edges.pop() forest = getForest(edge.first.forest, graph) if forest.contains(edge.second) = false then secondForest = getForest(edge.second.forest, graph) forEach v in secondForest v.forest = edge.first.forest next call mst.add(edge) endIf endWhile say("MST is complete.") finish function getForest(Integer forestNumber, Graph graph) initialize forest as List forEach vertex in graph.vertices if vertex.forest = forestNumber then call forest.add(vertex) endIf next return forest endFunction function populatePriorityQueue(Graph graph, PriorityQueue pq) forEach edge in graph.edges call pq.push(edge, edge.weight) next return "" endFunction function labelVertices(Graph graph) initialize i as Integer while i < graph.vertices.length graph.vertices.get(i).forest = i i = i + 1 endWhile return "" endFunction