Example #1
0
  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);
    }
  }