PASCAL八皇后问题(回溯法)
varx:array[1..8]ofinteger;a,b,c:array[-7..16]ofboolean;i:integer;procedureprint;vark:...
var
x:array[1..8]of integer;
a,b,c:array[-7..16]of boolean;
i:integer;
procedure print;
var
k:integer;
begin
for k:=1to 8do
write(x[k]:4);
writeln
end;
procedure try(i:integer);
var
j:integer;
begin
for j:=1to 8do
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 try(i+1)
else print;
a[j]:=true;
b[i+j]:=true;
c[i-j]:=true
end
end;
begin
for i:=-7 to 16 do
begin
a[i]:=true;
b[i]:=true;
c[i]:=true
end;
try(1)
end.
以上是书上的,书上解析说
“当某个皇后占用了位置(i,j){横坐标i,纵坐标j}时,将3个数组的对应元素设置为false。即a[j]:=false,b[i+j]:=false,c[i-j]:=false.”我想问一下a,b,c这三个数组分别代表什么?a[j],b[i+j],c[i-j]又是什么? 展开
x:array[1..8]of integer;
a,b,c:array[-7..16]of boolean;
i:integer;
procedure print;
var
k:integer;
begin
for k:=1to 8do
write(x[k]:4);
writeln
end;
procedure try(i:integer);
var
j:integer;
begin
for j:=1to 8do
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 try(i+1)
else print;
a[j]:=true;
b[i+j]:=true;
c[i-j]:=true
end
end;
begin
for i:=-7 to 16 do
begin
a[i]:=true;
b[i]:=true;
c[i]:=true
end;
try(1)
end.
以上是书上的,书上解析说
“当某个皇后占用了位置(i,j){横坐标i,纵坐标j}时,将3个数组的对应元素设置为false。即a[j]:=false,b[i+j]:=false,c[i-j]:=false.”我想问一下a,b,c这三个数组分别代表什么?a[j],b[i+j],c[i-j]又是什么? 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询