Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > 5 ферзей


Автор: Vsegnev 28.4.2007, 19:36
Найти такую расстоновку пяти ферзей на шахматной доске 8х8, при которой каждое поле будет находиться под ударом одного из них.
Всего должно получиться 4860 расстоновок. Нужно вывести все варианты.

Есть похожая задача (помещаю как пример): определить все возможные расстоновки n ферзей на шахматной доске mxm, при условии что ни один ферзь не угрожает другим. 
Вот код:
Код

program queens_rec;
uses crt;
const n=4; nd=n*2;
var m,k : word;
      gr : array [1..n] of boolean;
      vd,zd : array [1..nd] of boolean;
      poza : array [1..n] of word;
    procedure try (i:word);
    var j,l: word;
BEGIN
    for j:= 1 to n do
      if gr[j] and vd[n+j-i] and zd[i+j] then
          begin
       gr[j]:=false; vd[n+j-i]:=false; zd[i+j]:=false;
       poza[i]:=j;
       if i<n then try (i+1)
            else
             begin
          k:=k+1;
          write('; k=',k,' var=');
          for l:=1 to n do write(poza[l]);
         end;
       gr[j]:=true; vd[n+j-i]:=true; zd[i+j]:=true
          end;
END;
BEGIN
      clrscr;
      k:=0;
      for m:=1 to n do gr[m]:=true;
      for m:=1 to nd do
      begin vd[m]:=true; zd[m]:=true; end;
      try(1);
      writeln;
      writeln('‚Vsego ',k,' Variantov');
END.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)