U nizu a, u repeat petlji ti je svakm prolazom sledeca permutacija.
Code:
const
N=10;
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,br: integer;
a: niz;
begin
br:=0;
for i := 1 to N do
a[i]:=i;
repeat
inc(br);
until not nextpermute(a);
writeln('Ukupno ', br,' permutacija');
readln;
end.