public KruskalMST(EdgeWeightedGraph g) { mst = new Queue<Edge>(); MinPQ<Edge> pq = new MinPQ<Edge>(); for (Edge e : g.edges()) { pq.insert(e); } UnionFind uf = new UnionFind(g.vertices()); while (!pq.isEmpty() && mst.size() < g.vertices() - 1) { Edge e = pq.delMin(); int v = e.either(), w = e.other(v); if (uf.connected(v, w)) continue; // -- would form a cycle uf.union(v, w); mst.enqueue(e); } }