Пример #1
1
        /// <summary>
        /// Perform a Quick Find on a small text file.
        /// </summary>
        /// <param name="unionFind">The union find to be tested.</param>
        internal static void CommonUnionFindTiny(IUnionFind unionFind)
        {
            using (In input = new In("Algs4-Data\\TinyUF.txt"))
             {
            int initialComponentCount = input.ReadInt();
            unionFind.IsolateComponents(initialComponentCount);
            while (!input.IsEmpty())
            {
               int siteP = input.ReadInt();
               int siteQ = input.ReadInt();
               if (unionFind.Connected(siteP, siteQ))
               {
                  continue;
               }

               unionFind.Union(siteP, siteQ);
            }
             }

             Assert.AreEqual(2, unionFind.Count);
        }
        /// <summary>
        /// Common portion of file input UnionFind tests.
        /// </summary>
        /// <param name="streamName">The name for the input stream.</param>
        /// <param name="unionFind">The union find to be tested.</param>
        /// <returns>The Union Find structure.</returns>
        public static IUnionFind UnionFindCommon(string streamName, IUnionFind unionFind)
        {
            if (null == streamName)
             {
            throw new ArgumentNullException("streamName");
             }

             if (null == unionFind)
             {
            throw new ArgumentNullException("unionFind");
             }

             using (In input = new In(streamName))
             {
            int initialComponentCount = input.ReadInt();
            unionFind.IsolateComponents(initialComponentCount);
            while (!input.IsEmpty())
            {
               int siteP = input.ReadInt();
               int siteQ = input.ReadInt();
               if (unionFind.Connected(siteP, siteQ))
               {
                  continue;
               }

               unionFind.Union(siteP, siteQ);
            }

            return unionFind;
             }
        }
Пример #3
0
        private string GetNotConnectedUnions()
        {
            List <string> result = new List <string>();

            for (int i = 0; i < _unions.GetLength(0); i++)
            {
                int p = _unions[i, 0];
                int q = _unions[i, 1];

                if (!_unionFind.Connected(p, q))
                {
                    _unionFind.Union(p, q);
                    result.Add($"{p} {q}");
                }
            }

            return(string.Join(" : ", result));
        }
        public void WhenCall_Union_ShouldReturnCorrectComponentAndConnectedResults()
        {
            // Arrange
            var testDataSet = FakeUnionData.Data();

            // Act
            foreach (var obj in testDataSet)
            {
                int  p = (int)obj[0];
                int  q = (int)obj[1];
                int  componentCount = (int)obj[2];
                int  dot1           = (int)obj[3];
                int  dot2           = (int)obj[4];
                bool res            = (bool)obj[5];
                unionFind.Union(p, q);

                // Assert
                Assert.Equal(unionFind.Count(), componentCount);
                Assert.Equal(unionFind.Connected(dot1, dot2), res);
            }
        }