Wczoraj na forum padło pytanie o program rekurencyjny rozmieszczający hetmany na szachownicy. Nie wiem, czy temat ten był już poruszany na forum, czy też z innego powodu został zablokowany przez moderatora, ale zaciekawił mnie na tyle, by odkurzyć starego, poczciwego Pascala. Oto moja propozycja:

type

  THetmani = array [1..8] of Byte;

var
  Het: THetmani;

procedure Rec (Count: Byte; Het: THetmani);
var
  i, j: Integer;
  ok: Boolean;
begin
  if Count<9 then begin                      // jesli nie wszystkie hetmany sa ustawione
    for i:=1 to 8 do begin                    // to wyszukaj miejsce dla hetmana
      ok:=True;                                  // w kolejnej linii
      for j:=1 to Count-1 do begin        // sprawdz czy pozycja i nie koliduje z 
                                                       // poprzednio ustawionymi hetmanami
        if i=Het[j] then ok:=False;         // czy lezy w tej samej linii pionowej
        if i-Count=Het[j]-j then ok:=False; // czy lezy na linii ukosnej w lewo
        if i-j=Het[j]-Count then ok:=False; // czy lezy na linii ukosnej w prawo
      end;
      if ok then begin                             // jesli nie koliduje to ustaw hetmana
        Het[Count]:=i;                            
        Rec(Count+1,Het);                      // wyszukaj miejsca dla kolejnych
      end;                                             // hetmanow
    end;
  end else begin                                // jesli wszystkie hetmany ustawiono
    for i:=1 to 8 do Write(Het[i],' ');     // pokaz wynik
    WriteLn;
  end;
end;



begin

  Rec(1,Het);

end.