PROCEDURE GenPermutations(k, n: CARDINAL; perm: Permutation);
(* perm[n-k+1..n] ist festgelegt,
wobei perm[n-k+2..n] noch jeweils
um 1 zu erhoehen sind, falls sie >= perm[n-k+1] sind,
generiere alle Varianten fuer perm[1..n-k]
*)
VAR
eingefuegt: CARDINAL;
i: CARDINAL;
BEGIN
IF k > 1 THEN
eingefuegt := perm[n-k+1];
FOR i := n-k+2 TO n DO
IF perm[i] >= eingefuegt THEN
INC(perm[i]);
END;
END;
END;
IF k = n THEN
GenPermutation(perm, n);
ELSE
FOR i := 1 TO k+1 DO
perm[n-k] := i;
GenPermutations(k + 1, n, perm);
END;
END;
END GenPermutations;
|