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.