Napravi se gore pomenuti niz a=[1,2,3,4,5,6,7,8]
prodju se sve pernutacije niza a (ima ih kao sto je rekao Alef - 40320)
Za svaku permutaciju se proveri da li a[ i ] (i=1..8) tuce nekog na dole-desno ili na gore desno.
Ova procedura NextPermute samo daje sledecu permutaciju niza a.
Mislim da nisam koristio ni jednu naredbu koju obican paskal ne podrzava.
Code:
const
N=8;
type
niz=array[1..n] of integer;
function NextPermute(var x:niz): Boolean;
procedure swap(i:integer; j:integer);
var
temp : byte;
begin
temp := x[i];
x[i] := x[j];
x[j] := temp;
end;
var
k,j,r,s : integer;
begin
k := n-1;
while (k>0) and (x[k] > x[k+1]) do
k:=k-1;
if k<1 then
result:=false
else
begin
j := n;
while x[k] > x[j] do
j:=j-1;
swap(j,k);
r:=n;
s:=k+1;
while r>s do
begin
swap(r,s);
r:=r-1;
s:=s+1;
end;
result:=true;
end;
end;
var
i,j, svi: integer;
bije:boolean;
a: niz;
begin
svi :=0;
for i := 1 to n do
a[i]:=i;
repeat
bije := false;
for i := 1 to 8 do
begin
for j := 1 to a[i]-1 do
bije := bije or (a[i+j]=(a[i]-j));
for j := 1 to n-a[i] do
bije := bije or (a[i+j]=(a[i]+j));
end;
if not bije then
begin
for i := 1 to 8 do
write(chr(ord('A')+i-1)+chr(ord('0')+a[i])+' ');
writeln;
inc(svi);
end;
until not nextpermute(a);
writeln('Ukupno ', svi,' resenja');
readln;
end.