Link to code: BoardCell.java

/*
 * Created on Mar 18, 2005
 *
 */

/**
 * Encapsulate a (row,column) entry so that the entry
 * can be hashed, compared, and stored as a single
 * entry. This implementation provides simple methods
 * for determining when one BoardCell is a neighbor of
 * another. Here neighbor means adjacent horizontally,
 * vertically, or diagonally.
 * <P>
 * @author Owen Astrachan
 *
 */
public class BoardCell implements Comparable<BoardCell> {

    public int row;
    public int col;
    private int hash;  
    
    public BoardCell(int r, int c){
        row = r;
        col = c;
        hash = new Integer(row*1000+col).hashCode();
    }
    
    /**
     * Returns true iff c is a neighbor of this board
     * cell; neighbor means adjacent horizontally,
     * vertically, or diagonally (not self).
     * @param c is BoardCell compared to this one
     * for adjacency
     * @return true iff c adjacent to this BoardCell
     */
    public boolean isNeighbor(BoardCell c){
        if (c == null) return true;
        if (row == c.row) return Math.abs(col - c.col) == 1;
        if (col == c.col) return Math.abs(row - c.row) == 1;
        return Math.abs(col - c.col) + Math.abs(row - c.row) == 2;
    }
    public boolean equals(Object o){
        BoardCell c = (BoardCell) o;
        return c.row == row && c.col == col;
    }
    public int hashCode(){
        return hash;
    }
    
    /**
     * Returns value indicating whether cell is less
     * than, equal to, or greater than this cell as determined
     * first by row value, then by column value for 
     * cells whose rows are equal
     * @param cell compared to this BoardCell
     * @return row difference if rows aren't the same,
     * column difference if rows are the same
     */
    public int compareTo(BoardCell cell){
        int rd = row - cell.row;
        if (rd != 0) return rd;
        return col - cell.col;
    }
}