package graph; import partition.ListPartition; import partition.Partition; import position.NodePositionList; import position.PositionList; import priorityqueue.Entry; import priorityqueue.PriorityQueue; import priorityqueue.heap.HeapPriorityQueue; import java.security.InvalidKeyException; public class Kruskal { protected Graph graph; protected Object WEIGHT; protected PositionList> EList; protected PriorityQueue> Q; public Iterable> execute(Graph g, Object w) throws InvalidKeyException{ graph = g; WEIGHT = w; Q = new HeapPriorityQueue>(); EList = new NodePositionList>(); KruskalAlg(); return EList; } protected void KruskalAlg() throws InvalidKeyException{ Partition> P = new ListPartition>(); for (Vertex w : graph.vertices()) P.makeSet(w); for (Edge e : graph.edges()) Q.insert((Double) e.get(WEIGHT), e); while (EList.size() < graph.numVertices() - 1) { Entry> e_entry = Q.removeMin(); Edge e = e_entry.getValue(); Vertex endV[] = graph.endVertices(e); Vertex u = endV[0]; Vertex v = endV[1]; if (P.find(u) != P.find(v)) { P.union(P.find(u), P.find(v)); EList.addLast(e); } } } }