[问题描述] 八皇后问题:在一个8*8的国际象棋棋盘上放置八个皇后,使他们不互相攻击,求解的数量.
输入:[NONE] 输出:[SCREEN]
SOL01: 1 3....
.....
SOL92 :8 5....
[问题分析] 这是一个经典问题,是一个遍历的典型例子,本站给出一种比较易懂的方法,但效率不是最高.
program queen;const qnum=8;
var board:array[1..qnum] of integer;
m,n:array[2..2*qnum] of boolean;
y:array[1..qnum] of boolean;
count:integer;
procedure init;
var j:integer;
begin
count:=0;
for j:=1 to qnum do y[j]:=true;
for j:=2 to 2*qnum do begin m[j]:=true;n[j]:=true; end;
end;
procedure print;
var j:integer;
begin
inc(count);
write(count:8);
for j:=1 to qnum do write(board[j]:4);
writeln;
end;
procedure try(i:integer);
var j:integer;
begin
for j:=1 to qnum do
if y[j] and m[i+j] and n[i-j+qnum+1] then begin
board[i]:=j;y[j]:=false;m[i+j]:=false;n[i-j+qnum+1]:=false;
if i=qnum then print else try(i+1);
y[j]:=true;m[i+j]:=true;n[i-j+qnum+1]:=true;
end;
end;
begin
init;
try(1);
writeln('Program end.');
readln;
end.