关于八皇后的问题...(pascal的)

来源:百度知道 编辑:UC知道 时间:2024/07/02 15:12:22
program bahuanghou;
var
I:integer;
Q:boolean;
A:array[1..8] of boolean;
B:array[2..16] of boolean;
C:array[-7..7] of boolean;
X:array[1..8] of integer;

procedure Try(I:integer; var Q:boolean);
var
J:integer;
begin
J:=0;
repeat
J:=J+1;Q:=False;
if A[J] and B[I+J] and C[I-J] then
begin
X[I]:=J;A[J]:=false;
B[I+J]:=false;C[I-J]:=false ;
if I<8 then
begin
Try(I+1,Q);
if not Q then
begin
A[J]:=true;B[I+J]:=true;C[I-J]:=true;
end
end
else
Q:=true;
end
until Q or (J=8)
end;

begin
for I:=1 to 8 do A[I]:=true;
for I:=2 to 16 do B[I]:=true;
for I:=-7 to 7 do C[I]:=true;
Try(1,Q);
if Q then
begin

program bahuanghou;
var a:array[0..100]of integer;
n,i,k:integer;
procedure start;
begin
assign(input,'bahuanghou.in');
reset(input);
assign(output,'bahuanghou.out');
rewrite(output);
end;
procedure print;
begin
for i:=1 to n do write(a[i]);
writeln;
k:=k+1;
end;
procedure trying(i:integer);
var j,k:integer;
f:boolean;
begin
for j:=1 to n do
begin
f:=true;
for k:=1 to i-1 do
if(a[k]=j)or(k+a[k]=i+j)or(k-a[k]=i-j)then
begin f:=false;break;end;
if f then begin
a[i]:=j;
if i=n then print
else trying(i+1);
end;
end;
end;
begin
start;