皇后问题 pascal

来源:百度知道 编辑:UC知道 时间:2024/05/28 06:50:54
在一个4×4的棋盘里放置4个皇后,要求每个皇后两两之间不相"冲"(在每一横列竖列斜列只有一个皇后)。
错在哪里
program qipan;
var
i,j,t,k:byte;
a:array [1..4] of byte;
b:array [1..4] of boolean;
c:array [1..7] of boolean;
d:array [1..7] of boolean;
procedure print;
begin
inc(t);
writeln('Answer(',t,'):');
for i:=1 to 4 do
for j:=1 to 4 do
begin
if a[i]=j then write('*')
else write('O');
if j=4 then writeln;
end;
end;

procedure try(i:integer);
begin
for j:=1 to 4 do
if b[j] and c[i+j-1] and d[j-i+4] then
begin
a[i]:=j;b[j]:=false;c[i+j-1]:=false;d[j-i+4]:=false;
if i=4 then print
else try(i+1);
a[i]:=0;b[j]:=true;c[i+j-1]:=true;d[j-i+4]:=true;
end;
end;

这是n皇后
program hh;
const n=8;
var i,j,k:integer;
x:array[1..n] of integer;
function place(k:integer):boolean;
var i:integer;
begin
place:=true;
for i:=1 to k-1 do
if (x[i]=x[k]) or (abs(x[i]-x[k])=abs(i-k)) then
place:=false ;
end;
procedure print;
var i:integer;
begin
for i:=1 to n do write(x[i]:4);
writeln;
end;
procedure try(k:integer);
var i:integer;
begin
if k=n+1 then begin print; exit end;
for i:= 1 to n do
begin
x[k]:=i;
if place(k) then try(k+1);
end;
end ;
begin
try(1);
end.


N皇后问题?
- -
最讨厌看别人的code,飘过

大概是没有输出吧。