PASCAL N皇后问题求教

来源:百度知道 编辑:UC知道 时间:2024/05/14 03:32:54
program ss;
var
t:boolean;
i,k,n,j:shortint;
a:array[1..100] of shortint;
procedure huisu(k:integer);
begin
if k>n then
for i:=1 to n do write(a[i]:5)
else
begin
for i:=1 to n do
begin
t:=true;
for j:=1 to k-1 do
if (abs(a[j]-i)<>abs(j-k)) or (a[j]<>i) then
begin
t:=false;
break;
end;
if t then
begin
a[k]:=i;
huisu(k+1);
end;
end;
end;
end;
begin
read(n);
huisu(1);
end.
本题用的是回溯解法,但没有数据可以通过…………
求助………………
我只想知道我为什么错,错在哪。对于N皇后的标准答案我自己都有很多。这个程序是我突发奇想的一种创新方法,还请各位看看罢。
ps:if (abs(a[j]-i)<>abs(j-k)) or (a[j]<>i) then 一句改为
if (abs(a[j]-i)=abs(j-k)) or (a[j]=i) then

var a:array[1..10000] of longint;
b:array[1..10000] of boolean;
c:array[2..20000] of boolean;
d:array[-10000..10000] of boolean;
n:longint;
procedure print;
var i:longint;
begin
for i:=1 to n do
if i mod 4=0 then begin write(a[i]:4);writeln;end;
end;
procedure try(t:longint);
var j:longint;
begin
for j:=1 to n do
if b[j]and c[t+j] and d[t-j] then
begin
a[t]:=j;
b[j]:=false;
c[t+j]:=false;
d[t-j]:=false;
if t=n then print
else try(t+1);
b[j]:=true;
c[t+j]:=true;
d[t-j]:=true;
end;
end;
begin
assign(input,'queen.in');reset(input);
assign(output,'queen.out');rewrite(output);
readln(n);
fillchar(b,sizeof(b),#1);
fillchar(c,sizeof(c),#1);
fillchar(d,sizeof(d),#1);
try(1);
close(input);close(output);
end.

program eightqueen;
var
x:array[