Example #1
0
        private bool IsSimiliar(string[] sentence1, string[] sentence2, string[][] pairs)
        {
            if (sentence1.Length != sentence2.Length)
            {
                return(false);
            }

            var set = new UnionFindSet().Build(pairs);

            for (int i = 0; i < sentence1.Length; i++)
            {
                if (sentence1[i] != sentence2[i])
                {
                    var realMeaning1 = set.Find(sentence1[i]);
                    var realMeaning2 = set.Find(sentence2[i]);

                    if (realMeaning1 != realMeaning2)
                    {
                        return(false);
                    }
                }
            }

            return(true);
        }
Example #2
0
        private int[] FindRedundantConnection(int[][] edges)
        {
            var set = new UnionFindSet <int>().Build(edges);

            set.GetRedundantEdges();

            return(set.GetRedundantEdges().Last());
        }
        private int GetNumberOfOperationsToConnectAll(int n, int[][] connections)
        {
            var unionFindSet = new UnionFindSet(n, connections).Build();

            var danglingVertices = 0;

            for (int i = 0; i < unionFindSet.ParentTable.Length; i++)
            {
                if (unionFindSet.ParentTable[i] == i || unionFindSet.ParentTable[i] == -1)
                {
                    danglingVertices++;
                }
            }

            return(unionFindSet.RedundantConnections >= danglingVertices - 1 ? danglingVertices - 1 : -1);
        }
Example #4
0
        public static MazeWall Generate(MazeWall wall)
        {
            mazeWall = wall;
            walls.Clear();

            //封闭全部墙壁
            mazeWall.ClosedAllWall();

            //初始化并查集
            UnionFindSet set = new UnionFindSet
                                   (mazeWall.RowLength * mazeWall.ColLength);

            Init();


            while (walls.Count > 0)
            {
                int randomIndex = Random.Range(0, walls.Count);
                var _wall       = walls[randomIndex];



                if (set.Union(
                        GetUnionSetIndex(_wall.Key),
                        GetUnionSetIndex(_wall.Value)))
                {
                    mazeWall.OpenArea(_wall.Key, _wall.Value);
                }

                walls.RemoveAt(randomIndex);
            }



            //随机选择迷宫起点终点
            mazeWall.RandomOpenStartAndPoint();
            mazeWall.RandomOpenStartAndPoint();

            return(mazeWall);
        }