public KruskMST(WeightedGraph graph) { MinHeap <Edge> queue = new MinHeap <Edge>(graph.E()); for (int i = 0; i < graph.V(); i++) { foreach (Edge edge in graph.Edges(i)) { if (edge.From() < edge.To()) { queue.Insert(edge); } } } List <Edge> edges = new List <Edge>(); UnionFind.UnionFind unionFind = new QuickUnionWithCompression(graph.V()); while (!queue.isEmpty()) { Edge edge = queue.Popup(); if (!unionFind.isConnected(edge.From(), edge.To())) { edges.Add(edge); wt += edge.Weight(); unionFind.union(edge.From(), edge.To()); } } this.edges = edges.ToArray <Edge>(); }
public void TestQuickUnionWithCompression() { UnionFind unionFind = new QuickUnionWithCompression(count); this.TestUnionFind(unionFind); }