This a more efficient implementation of Question 2.
boolean valid_position(boolean[][] board, int row, int column)
{
if (board[i][j])
return false;
else {
int i,j;
// check each square in the column
j = column;
for (i = 0; i < board.length; i++) {
if (board[i][j])
return false;
}
// check each square in the row
i = row;
for (j = 0; j < board[i].length; j++) {
if (board[i][j])
return false;
}
//check diagonals
int incr_i, incr_j;
return
(diagonal(-1,-1,board,row,column) && diagonal(1,-1,board,row,column)
&& diagonal(1,1,board,row,column) && diagonal(-1,1,board,row,column));
}
}
boolean diagonal(int incr_i, int incr_j, boolean[][] board, int row,
int column)
{
int i = row + incr_i;
int j = column + incr_j;
while ( i < board.length && j < board[i].length && i>=0 && j>=0)
{
if (board[i][j]) return false;
i += incr_i;
j += incr_j;
}
}
Back to April 98 Final