program PermutationsAndCombinations
const
MaxSize = 10;
type
CharArray = array[1..MaxSize] of char;
var
arr : CharArray;
n : integer;
procedure PrintArray(a: CharArray; len: integer);
var
i: integer;
begin
for i := 1 to len do
write(a[i], ' ');
writeln;
end;
procedure Swap(var x, y: char);
var
tmp: char;
begin
tmp := x;
x := y;
y := tmp;
end;
procedure GeneratePermutations(a: CharArray; l, r: integer);
var
i: integer;
begin
if l = r then
PrintArray(a, r)
else
for i := l to r do
begin
Swap(a[l], a[i]);
GeneratePermutations(a, l + 1, r);
Swap(a[l], a[i]); { backtrack }
end;
end;
procedure GenerateCombinations(a: CharArray; size: integer);
var
mask, i: integer;
subset: CharArray;
len: integer;
begin
for mask := 1 to (1 shl size) - 1 do
begin
len := 0;
for i := 0 to size-1 do
if (mask and (1 shl i)) <> 0 then
begin
inc(len);
subset[len] := a[i+1];
end;
PrintArray(subset, len);
end;
end;
begin
{ initialize array with 'a','b','c' }
n := 3;
arr[1] := 'a';
arr[2] := 'b';
arr[3] := 'c';
writeln('All permutations:');
GeneratePermutations(arr, 1, n);
writeln;
writeln('All combinations:');
GenerateCombinations(arr, n);
end.
(*
run:
All permutations:
a b c
a c b
b a c
b c a
c b a
c a b
All combinations:
a
b
a b
c
a c
b c
a b c
*)