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); }
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); }
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); }