PROCEDURE InitBoard(VAR board: Board; n: BoardSize);
BEGIN
ASSERT((n > 0) & (n <= maxn));
board.size := n;
board.nofqueens := 0;
board.rows := {};
board.cols := {};
board.diags1 := {};
board.diags2 := {};
END InitBoard;
PROCEDURE AddQueen(VAR board: Board; row, col: Position);
BEGIN
ASSERT(~Threatened(board, row, col));
INCL(board.rows, row);
INCL(board.cols, col);
INCL(board.diags1, row - col + board.size - 1);
INCL(board.diags2, row + col);
board.pos[board.nofqueens].row := row;
board.pos[board.nofqueens].col := col;
INC(board.nofqueens);
END AddQueen;
|