Научная работа

PASCAL: Решение задачи о восьми ферзях
Чулюков В.А.

 

Задача: разместить на шахматной доске 8 ферзей так, чтобы ни один из них не бил другого. В качестве ответа выдается номер ячейки в каждой линии, куда надо поставить ферзя.

program ferz;
uses crt;
var s,i:integer;
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 print;
var k:integer;
begin
s:=s+1;
write('Решение номер ',s:2,' : ');
for k:=1 to 8 do write(x[k]:4);
writeln;
write('Press <Enter>');
readln;
end;{of print}

procedure try(i:integer);
var j:integer;
begin
for j:=1 to 8 do
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;{of try}

begin{of main}
clrscr;
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;
s:=0;
try(1)
end.