PROCEDURE GenPermutations(k, n: INTEGER; perm: Permutation);
(* perm[n-k..n-1] is fixed except that
those of perm[n-k+1..n-1] are to be incremented by 1
which are greater or equal to perm[n-k];
generate all variants for perm[0..n-k-1]
*)
VAR
inserted: INTEGER;
i: INTEGER;
BEGIN
IF k > 1 THEN
inserted := perm[n-k];
i := n-k+1;
WHILE i < n DO
IF perm[i] >= inserted THEN
INC(perm[i]);
END;
INC(i);
END;
END;
IF k = n THEN
GenPermutation(perm, n);
ELSE
i := 1;
WHILE i <= k+1 DO
perm[n-k-1] := i;
GenPermutations(k + 1, n, perm);
INC(i);
END;
END;
END GenPermutations;
|