public static void Main(string[] args) { int N = StdIn.ReadInt(); WeightedQuickUnionPathCompressionUF uf = new WeightedQuickUnionPathCompressionUF(N); // read in a sequence of pairs of integers (each in the range 0 to N-1), // calling find() for each pair: If the members of the pair are not already // call union() and print the pair. while (!StdIn.IsEmpty()) { int p = StdIn.ReadInt(); int q = StdIn.ReadInt(); if (uf.Connected(p, q)) { continue; } uf.Union(p, q); Console.WriteLine(p + " " + q); } Console.WriteLine(uf.Count + " components"); }
public Percolation(int n) { this.n = n; this.openMatrix = new bool[n][]; uf = new WeightedQuickUnionPathCompressionUF(n * n + 2); this.top = n * n; this.last = n * n + 1; for (int i = 1; i <= n; i++) { uf.Union(this.top, this.toOneDimension(1, i)); uf.Union(this.last, this.toOneDimension(n, i)); } }// create n-by-n grid, with all sites blocked