/**
 * A Checked Board for use with the NQueens problem
 * 
 * @author Professor Killian
 *
 */
public interface Board {
	/**
	 * Checks requirements of a queen to see if piece can be placed on the board.
	 * This will perform column, row, and diagonal checks
	 * 
	 * @param r zero-based row index to attempt placement
	 * @param c zero-based column index to attempt placement
	 * @return true if and only if a queen can be placed
	 */
	boolean canPlace(int r, int c);

	/**
	 * Places a queen at the specified location
	 * @param r zero-based row index to place
	 * @param c zero-based column index to place
	 */
	void place(int r, int c);

	/**
	 * Unplaces a queen at the specified location
	 * @param r zero-based row index to unplace
	 * @param c zero-based column index to unplace
	 */
	void unplace(int r, int c);

	/**
	 * Prints a board using <code>*</code> to indicate queens
	 * and <code>.</code> to represent empty locations
	 */
	void print();

	/**
	 * Size of the board
	 * 
	 * @return the size of the board
	 */
	int size();
}
