public static void main(String[] args) { QuickFindUF qf = new QuickFindUF(6); qf.union(0, 1); qf.union(2, 5); qf.union(4, 5); qf.union(3, 4); qf.union(2, 4); System.out.println(qf.connected(4, 3)); }
/** @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here // 8-1 5-1 2-9 0-9 5-7 6-2 QuickFindUF uf = new QuickFindUF(10); uf.union(8, 1); uf.union(5, 1); uf.union(2, 9); uf.union(0, 9); uf.union(5, 7); uf.union(6, 2); System.out.println(uf.toString()); }
// is site (row i, column j) full? public boolean isFull(int i, int j) { int p = i * _N + j; for (int q = 0; q < _N; q++) { if (_sites.connected(p, q)) { return true; } } return false; }
// open site (row i, column j) if it is not already public void open(int i, int j) { // i,j both 1~N int i_ = i - 1; int j_ = j - 1; int p = i_ * _N + j_; if (!isOpen(i_, j_)) { _openSites[p] = true; } // up if (i_ > 0) { if (isOpen(i_ - 1, j_)) { int q = (i_ - 1) * _N + j_; _sites.union(p, q); } } // down if (i_ < _N - 1) { int q = (i_ + 1) * _N + j_; if (isOpen(i_ + 1, j_)) { _sites.union(p, q); } } // left if (j_ > 0) { int q = i_ * _N + j_ - 1; if (isOpen(i_, j_ - 1)) { _sites.union(p, q); } } // right if (j_ < _N - 1) { int q = i_ * _N + j_ + 1; if (isOpen(i_, j_ + 1)) { _sites.union(p, q); } } }
// does the system percolate? public boolean percolates() { for (int t = 1; t <= _N; t++) { // top for (int b = 1; b <= _N; b++) { // bottom int p = t - 1; int q = (_N - 1) * _N + b - 1; if (_sites.connected(p, q)) { return true; } } } return false; }