Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Обсуждение задачи про ферзей

Автор: Bard 1.05.2007 14:02

а вот тебе прога этой задачи good.gif

 
program Queens;
const N=8;
type Index=1..N;
Rasstanovka=array [Index] of 0..N;
var X:Rasstanovka;
Count:word;
function P(var X:Rasstanovka;k,y:Index):boolean;
var i:Index;
begin
i:=1;
while (i<k)and(y<>X[i])and(abs(k-i)<>abs(y-X[i])) do inc(i);
P:=i=k
end;
procedure Backtracking(k:Index);
var i,y:Index;
begin
for y:=1 to N do
if P(X,k,y) then
begin
X[k]:=y;
if k=N then
begin
for i:=1 to N do write(X[i]);writeln;inc(Count)
end;
Backtracking(k+1)
end
end;
begin
Count:=0;
writeln('Расстановки ',N,' ферзей:');
Backtracking(1);
writeln('Всего ',Count,' расстановок')
end.




Добавлено через 3 мин.
точнее это программа вычисляет количество способов таких расстановок с N ферзями

М
Bard, обрати внимание на первый пост в теме "Олимпиадные задачи".
Пожалуйста, пость туда только проверенные решения.
Я вынес твое сообщение в отдельную тему.
Lapp


Автор: volvo 1.05.2007 15:04

Цитата
а вот тебе прога этой задачи

А вот тебе (на всякий случай, если сам не нашел) - программа из FAQ-а форума:
http://forum.pascal.net.ru/index.php?s=&showtopic=2503&view=findpost&p=21697

Автор: Lapp 1.05.2007 15:06

Bard, твоя программа у меня вылетела с ошибкой 201... Проверь, пожалуйста, решение.

Вообще-то, решение этой задачи есть в FAQ'е: http://forum.pascal.net.ru/index.php?showtopic=2503