PASCAL八皇后问题(回溯法)

来源:百度知道 编辑:UC知道 时间:2024/05/28 08:51:00
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]又是什么?

额?答过这一问了。不介意再给20分吧
a[j]表示第j列是否被占用
b[i+j]表示从右上到左下的i+j号斜线(左上角第一条为2号,右下角第一条为16号)是否被占用
c[i-j]表示从左上到右下的i-j号斜线(右上角第一条为7号,左下角第一条为-7号)是否被占用