Link to code: IPercolate.java
/**
* This interface encapsulates what a class used in Percolation Threshold
* simulations should support. By varying the implementations you can experiment
* with different approaches in analyzing not only what the Percolation
* Threshold constants are for different grids, but how efficiently these
* constants can be determined via simulation.
*
* @author Owen Astrachan
* @author Jeff Forbes
* @date March, 2008
* @date September, 2008
* @date March, 2011
*/
public interface IPercolate {
// Possible states for a grid cell are BLOCKED, OPEN, and FULL
public static final int BLOCKED = 0;
public static final int OPEN = 1;
public static final int FULL = 2;
/**
* Open site (row i, col j) if it is not already open. By convention, (0, 0)
* is the upper-left site
*
* The method modifies internal state so that determining if percolation
* occurs could change after taking a step in the simulation.
*
* @param i
* row index in range [0,N-1]
* @param j
* column index in range [0,N-1]
*/
public abstract void open(int i, int j);
/**
* Returns true if and only if site (row i, col j) is OPEN
*
* @param i
* row index in range [0,N-1]
* @param j
* column index in range [0,N-1]
*/
public abstract boolean isOpen(int i, int j);
/**
* Returns true if and only if site (row i, col j) is FULL
*
* @param i
* row index in range [0,N-1]
* @param j
* column index in range [0,N-1]
*/
public boolean isFull(int i, int j);
/**
* Returns true if the simulated percolation actually percolates. What it
* means to percolate could depend on the system being simulated, but
* returning true typically means there's a connected path from
* top-to-bottom.
*
* @return true iff the simulated system percolates
*/
public abstract boolean percolates();
}