public Kruskal(WeightedGraph G) { var V = G.V(); var uf = new QuickUnion(V); var pq = new MinPQ <Edge>(); mst = new List <Edge>(); foreach (Edge e in G.edges()) { pq.Enqueue(e); } while (!pq.IsEmpty && mst.Count < V - 1) { var e = pq.DelMin(); var v = e.either(); var w = e.other(v); if (!uf.IsConnected(v, w)) { uf.Union(v, w); mst.Add(e); } } }
public void IsConnected_NodesAreConnected_ReturnsTrue() { QuickUnion quickUnion = new QuickUnion(5); quickUnion.Union(1, 2); Assert.IsTrue(quickUnion.IsConnected(1, 2)); }
public void IsConnected_NodesAreNotConnected_ReturnsFalse() { QuickUnion quickUnion = new QuickUnion(5); quickUnion.Union(1, 2); Assert.IsFalse(quickUnion.IsConnected(2, 3)); }
public void IsConnected_MultipleUnions_ReturnsTrue() { QuickUnion quickUnion = new QuickUnion(5); quickUnion.Union(1, 2); quickUnion.Union(2, 3); Assert.IsTrue(quickUnion.IsConnected(1, 3)); }
public void IsConnected_UnionOfConnectedNodes_ReturnsTrue() { QuickUnion quickUnion = new QuickUnion(5); quickUnion.Union(1, 2); quickUnion.Union(4, 5); quickUnion.Union(1, 4); Assert.IsTrue(quickUnion.IsConnected(2, 4)); }
public void QuickUnionTest() { QuickUnion uf = new QuickUnion(13); uf.Union(0, 1); uf.Union(1, 2); uf.Union(4, 5); uf.Union(0, 3); uf.Union(7, 8); uf.Union(8, 9); uf.Union(6, 11); uf.Union(11, 10); uf.Union(9, 12); uf.Union(1, 12); Assert.False(uf.IsConnected(2, 5)); Assert.True(uf.IsConnected(7, 12)); Assert.False(uf.IsConnected(6, 8)); Assert.True(uf.IsConnected(0, 12)); }
public void test_union_find() { var uf = new QuickUnion(10); uf.Union(1, 3); uf.Union(2, 3); uf.Union(5, 6); uf.Union(4, 5); Assert.True(uf.IsConnected(1, 3)); Assert.True(uf.IsConnected(2, 3)); Assert.True(uf.IsConnected(1, 2)); Assert.True(uf.IsConnected(4, 5)); Assert.True(uf.IsConnected(4, 6)); Assert.False(uf.IsConnected(1, 6)); Assert.False(uf.IsConnected(3, 4)); this.logger.WriteLine("Connected: {1, 2, 3}"); }