Here is an example which I just wrote for you. It will lose its indentation when posted, but I hope you can read it anyway. It sets up a chessboard, tries adding a queen at a time in a free position, and for each time marks the squares which cannot be used, and tries to add a new queen recursively.

type

pos = (Free, Queen, Busy);

chessboard = array[1..8,1..8] of pos;

Var

r,k: integer;

emptyboard : chessboard;

function min(a,b:integer):integer;

begin

if a<b then min := a else min := b;

end;

function findsolution(board : chessboard; level : Integer): Boolean;

Var

r,k:integer;

i:integer;

ch:char;

boardcopy:chessboard;

begin

findsolution:=false;

boardcopy := board;

for r:=1 to 8 do

for k:=1 to 8 do

if boardcopy[r, k] = Free Then

begin

if level+1 = 8 then begin

writeln;

writeln('Solution:');

for r:=1 to 8 do

begin

for k:=1 to 8 do

If boardcopy[r, k] = Queen then

write('Q')

else

write(' ');

writeln;

end;

findsolution:=true;

exit;

end;

board:=boardcopy;

for i:=1 to 8 do

board[i, k]:=Busy;

for i:=1 to 8 do

board[r, i]:=Busy;

for i:=1-min(r,k) to min(9-r,9-k)-1 do

board[r+i, k+i]:=Busy;

for i:=1-min(9-r,k) to min(r, 9-k)-1 do

board[r-i, k+i]:=Busy;

board[r, k]:=Queen;

if findsolution(board, level+1) Then

begin

findsolution:=True;

exit;

end;

end;

end;

begin

for r:=1 to 8 do

for k:=1 to 8 do

emptyboard[r,k]:=Free;

if findsolution(emptyboard, 0) then

writeln('A solution was found');

end.

type

pos = (Free, Queen, Busy);

chessboard = array[1..8,1..8] of pos;

Var

r,k: integer;

emptyboard : chessboard;

function min(a,b:integer):integer;

begin

if a<b then min := a else min := b;

end;

function findsolution(board : chessboard; level : Integer): Boolean;

Var

r,k:integer;

i:integer;

ch:char;

boardcopy:chessboard;

begin

findsolution:=false;

boardcopy := board;

for r:=1 to 8 do

for k:=1 to 8 do

if boardcopy[r, k] = Free Then

begin

if level+1 = 8 then begin

writeln;

writeln('Solution:');

for r:=1 to 8 do

begin

for k:=1 to 8 do

If boardcopy[r, k] = Queen then

write('Q')

else

write(' ');

writeln;

end;

findsolution:=true;

exit;

end;

board:=boardcopy;

for i:=1 to 8 do

board[i, k]:=Busy;

for i:=1 to 8 do

board[r, i]:=Busy;

for i:=1-min(r,k) to min(9-r,9-k)-1 do

board[r+i, k+i]:=Busy;

for i:=1-min(9-r,k) to min(r, 9-k)-1 do

board[r-i, k+i]:=Busy;

board[r, k]:=Queen;

if findsolution(board, level+1) Then

begin

findsolution:=True;

exit;

end;

end;

end;

begin

for r:=1 to 8 do

for k:=1 to 8 do

emptyboard[r,k]:=Free;

if findsolution(emptyboard, 0) then

writeln('A solution was found');

end.