/// <summary> /// 使用指定的连接按顺序合并。 /// </summary> /// <param name="uf">需要测试的并查集。</param> /// <param name="connections">用于输入的连接集合。</param> public static void Count(Uf uf, Connection[] connections) { foreach (var c in connections) { uf.Union(c.P, c.Q); } }
/// <summary> /// 随机生成连接,返回令并查集中只剩一个连通分量所需的连接总数。 /// </summary> /// <param name="uf">用于测试的并查集。</param> /// <returns>需要的连接总数。</returns> public static int Count(Uf uf) { var random = new Random(); var size = uf.Count(); var edges = 0; while (uf.Count() > 1) { var p = random.Next(size); var q = random.Next(size); uf.Union(p, q); edges++; } return(edges); }