コード例 #1
0
 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));
 }
コード例 #2
0
  /** @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());
  }
コード例 #3
0
 // 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;
 }
コード例 #4
0
  // 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);
      }
    }
  }
コード例 #5
0
 // 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;
 }