Пример #1
0
        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);
                }
            }
        }
Пример #2
0
        public void IsConnected_NodesAreConnected_ReturnsTrue()
        {
            QuickUnion quickUnion = new QuickUnion(5);

            quickUnion.Union(1, 2);

            Assert.IsTrue(quickUnion.IsConnected(1, 2));
        }
Пример #3
0
        public void IsConnected_NodesAreNotConnected_ReturnsFalse()
        {
            QuickUnion quickUnion = new QuickUnion(5);

            quickUnion.Union(1, 2);

            Assert.IsFalse(quickUnion.IsConnected(2, 3));
        }
Пример #4
0
        public void IsConnected_MultipleUnions_ReturnsTrue()
        {
            QuickUnion quickUnion = new QuickUnion(5);

            quickUnion.Union(1, 2);
            quickUnion.Union(2, 3);

            Assert.IsTrue(quickUnion.IsConnected(1, 3));
        }
Пример #5
0
        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));
        }
Пример #6
0
        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}");
        }