コード例 #1
0
        public int MakeConnected(int n, int[][] connections)
        {
            if (connections.Length < n - 1)
            {
                return(-1);
            }

            QuickUnionUF uf = new QuickUnionUF(n);

            int p;
            int q;

            for (int i = 0; i < connections.Length; i++)
            {
                p = connections[i][0];
                q = connections[i][1];
                if (uf.Find(p) != uf.Find(q))
                {
                    uf.Uunion(p, q);
                }
            }

            int requiredEdges = uf.Count - 1;

            return(requiredEdges);
        }
コード例 #2
0
        public void testUnionAndConnected_NewConnection()
        {
            QuickUnionUF quickUnionUF = new QuickUnionUF(10);

            Assert.IsFalse(quickUnionUF.Connected(0, 1));
            Assert.AreEqual(10, quickUnionUF.Count());
            quickUnionUF.Union(0, 1);
            Assert.IsTrue(quickUnionUF.Connected(0, 1));
            Assert.AreEqual(9, quickUnionUF.Count());
            Assert.AreEqual(1, quickUnionUF.Find(1));
            Assert.AreEqual(1, quickUnionUF.Find(0));
        }
コード例 #3
0
        public void testUnionAndConnected_MultiConnection()
        {
            QuickUnionUF quickUnionUF = new QuickUnionUF(10);

            quickUnionUF.Union(0, 1);
            quickUnionUF.Union(2, 1);
            Assert.IsTrue(quickUnionUF.Connected(0, 1));
            Assert.IsTrue(quickUnionUF.Connected(2, 1));
            Assert.IsTrue(quickUnionUF.Connected(2, 0));
            Assert.AreEqual(8, quickUnionUF.Count());
            Assert.AreEqual(1, quickUnionUF.Find(1));
            Assert.AreEqual(1, quickUnionUF.Find(0));
            Assert.AreEqual(1, quickUnionUF.Find(2));

            quickUnionUF.Union(2, 5);
            Assert.IsTrue(quickUnionUF.Connected(0, 1));
            Assert.IsTrue(quickUnionUF.Connected(2, 1));
            Assert.IsTrue(quickUnionUF.Connected(2, 0));
            Assert.IsTrue(quickUnionUF.Connected(5, 0));
            Assert.IsTrue(quickUnionUF.Connected(5, 1));
            Assert.IsTrue(quickUnionUF.Connected(5, 2));
            Assert.AreEqual(7, quickUnionUF.Count());
            Assert.AreEqual(5, quickUnionUF.Find(1));
            Assert.AreEqual(5, quickUnionUF.Find(0));
            Assert.AreEqual(5, quickUnionUF.Find(2));
            Assert.AreEqual(5, quickUnionUF.Find(5));
        }
コード例 #4
0
        public void testFind()
        {
            QuickUnionUF quickUnionUF = new QuickUnionUF(10);

            for (int i = 0; i < 10; i++)
            {
                Assert.AreEqual(i, quickUnionUF.Find(i));
            }
        }
コード例 #5
0
        public void testFind_ParameterValidation_PLargerThanN()
        {
            QuickUnionUF quickUnionUF = new QuickUnionUF(10);

            quickUnionUF.Find(11);
        }
コード例 #6
0
        public void testFind_ParameterValidation_PEqualN()
        {
            QuickUnionUF quickUnionUF = new QuickUnionUF(10);

            quickUnionUF.Find(10);
        }
コード例 #7
0
        public void testFind_ParameterValidation_PLessThan0()
        {
            QuickUnionUF quickUnionUF = new QuickUnionUF(10);

            quickUnionUF.Find(-1);
        }