Presentation is loading. Please wait.

Presentation is loading. Please wait.

Enumerating all Permutations

Similar presentations


Presentation on theme: "Enumerating all Permutations"— Presentation transcript:

1 Enumerating all Permutations
#include <stdio.h> char a[] = "abc"; void swap(int i, int j) { int t; t = a[i]; a[i] = a[j]; a[j] = t; } void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); int main(void) { enumerate(3); return 0; Enumerating all Permutations

2 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 3 i = ? Stack b c a 1 2 array a value index

3 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 3 i = 0 Stack b c a 1 2 array a value index

4 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 3 i = 0 Stack array a index 1 2 value c b a swap

5 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 2 i = ? void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(2) environment n = 3 i = 0 Stack array a index 1 2 value c b a

6 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 2 i = 0 void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(2) environment n = 3 i = 0 Stack array a index 1 2 value c b a

7 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 2 i = 0 void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(2) environment n = 3 i = 0 Stack array a index 1 2 value b c a swap

8 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 1 i = ? environment n = 2 i = 0 void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(2) void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(2) environment n = 3 i = 0 void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(1) Stack array a index 1 2 value b c a

9 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 1 i = ? environment n = 2 i = 0 void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(2) void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(2) environment n = 3 i = 0 void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(1) Stack % a.out bca cba cab acb bac abc Unix array a index 1 2 value b c a

10 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 2 i = 0 void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(2) void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(2) environment n = 3 i = 0 Stack % a.out bca cba cab acb bac abc Unix array a index 1 2 value b c a

11 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 2 i = 0 void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(2) void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(2) environment n = 3 i = 0 Stack % a.out bca cba cab acb bac abc Unix array a index 1 2 value c b a swap

12 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 2 i = 1 void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(2) void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(2) environment n = 3 i = 0 Stack % a.out bca cba cab acb bac abc Unix array a index 1 2 value c b a

13 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 2 i = 1 void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(2) void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(2) environment n = 3 i = 0 Stack % a.out bca cba cab acb bac abc Unix array a index 1 2 value c b a self-swap

14 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 1 i = ? environment n = 2 i = 1 void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(2) void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(2) environment n = 3 i = 0 void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(1) Stack % a.out bca cba cab acb bac abc Unix array a index 1 2 value c b a

15 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 2 i = 1 void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(2) void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(2) environment n = 3 i = 0 Stack % a.out bca cba cab acb bac abc Unix array a index 1 2 value c b a self-swap

16 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 2 i = 2 void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(2) void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(2) environment n = 3 i = 0 Stack % a.out bca cba cab acb bac abc Unix array a index 1 2 value c b a

17 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 3 i = 0 Stack % a.out bca cba cab acb bac abc Unix array a index 1 2 value c b a

18 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 3 i = 0 Stack % a.out bca cba cab acb bac abc Unix array a index 1 2 value a b c swap

19 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 3 i = 1 Stack % a.out bca cba cab acb bac abc Unix array a index 1 2 value a b c

20 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 3 i = 1 Stack % a.out bca cba cab acb bac abc Unix array a index 1 2 value a c b swap

21 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 2 i = 0 void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(2) environment n = 3 i = 1 Stack % a.out bca cba cab acb bac abc Unix array a index 1 2 value a c b swap

22 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 2 i = 0 void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(2) environment n = 3 i = 1 Stack % a.out bca cba cab acb bac abc Unix array a index 1 2 value c a b swap

23 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 1 i = ? environment n = 2 i = 0 void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(2) environment n = 3 i = 1 void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(1) Stack % a.out bca cba cab acb bac abc Unix array a index 1 2 value c a b

24 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 2 i = 0 void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(2) environment n = 3 i = 1 Stack % a.out bca cba cab acb bac abc Unix array a index 1 2 value c a b

25 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 2 i = 0 void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(2) environment n = 3 i = 1 Stack % a.out bca cba cab acb bac abc Unix array a index 1 2 value a c b swap

26 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 2 i = 1 void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(2) environment n = 3 i = 1 Stack % a.out bca cba cab acb bac abc Unix array a index 1 2 value a c b

27 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 2 i = 1 void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(2) environment n = 3 i = 1 Stack % a.out bca cba cab acb bac abc Unix array a index 1 2 value a c b self-swap

28 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 1 i = ? environment n = 2 i = 1 void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(2) environment n = 3 i = 1 void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(1) Stack % a.out bca cba cab acb bac abc Unix array a index 1 2 value a c b

29 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 2 i = 1 void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(2) environment n = 3 i = 1 Stack % a.out bca cba cab acb bac abc Unix array a index 1 2 value a c b

30 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 2 i = 1 void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(2) environment n = 3 i = 1 Stack % a.out bca cba cab acb bac abc Unix array a index 1 2 value a c b self-swap

31 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 2 i = 2 void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(2) environment n = 3 i = 1 Stack % a.out bca cba cab acb bac abc Unix array a index 1 2 value a c b

32 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 3 i = 1 Stack % a.out bca cba cab acb bac abc Unix array a index 1 2 value a c b

33 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 3 i = 1 Stack % a.out bca cba cab acb bac abc Unix array a index 1 2 value a c b

34 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 3 i = 1 Stack % a.out bca cba cab acb bac abc Unix array a index 1 2 value a b c swap

35 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 3 i = 2 Stack % a.out bca cba cab acb bac abc Unix array a index 1 2 value a b c

36 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 3 i = 2 Stack % a.out bca cba cab acb bac abc Unix array a index 1 2 value a b c self-swap

37 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 2 i = 0 void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(2) environment n = 3 i = 2 Stack % a.out bca cba cab acb bac abc Unix array a index 1 2 value a b c

38 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 2 i = 0 void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(2) environment n = 3 i = 2 Stack % a.out bca cba cab acb bac abc Unix array a index 1 2 value b a c swap

39 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 1 i = ? environment n = 2 i = 0 void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(2) environment n = 3 i = 2 void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(1) Stack % a.out bca cba cab acb bac abc Unix array a index 1 2 value b a c

40 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 2 i = 0 void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(2) environment n = 3 i = 2 Stack % a.out bca cba cab acb bac abc Unix array a index 1 2 value b a c

41 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 2 i = 0 void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(2) environment n = 3 i = 2 Stack % a.out bca cba cab acb bac abc Unix array a index 1 2 value a b c swap

42 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 2 i = 1 void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(2) environment n = 3 i = 2 Stack % a.out bca cba cab acb bac abc Unix array a index 1 2 value a b c

43 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 2 i = 1 void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(2) environment n = 3 i = 2 Stack % a.out bca cba cab acb bac abc Unix array a index 1 2 value a b c self-swap

44 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 1 i = ? environment n = 2 i = 1 void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(2) environment n = 3 i = 2 void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(1) Stack % a.out bca cba cab acb bac abc Unix array a index 1 2 value a b c

45 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 2 i = 1 void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(2) environment n = 3 i = 2 Stack % a.out bca cba cab acb bac abc Unix array a index 1 2 value a b c

46 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 2 i = 1 void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(2) environment n = 3 i = 2 Stack % a.out bca cba cab acb bac abc Unix array a index 1 2 value a b c self-swap

47 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 2 i = 2 void enumerate(int n) { int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(2) environment n = 3 i = 2 Stack % a.out bca cba cab acb bac abc Unix array a index 1 2 value a b c

48 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 3 i = 2 Stack % a.out bca cba cab acb bac abc Unix array a index 1 2 value a b c

49 Stack void enumerate(int n) { int i; if (1 == n) printf("%s\n", a);
else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) environment n = 3 i = 2 Stack % a.out bca cba cab acb bac abc Unix array a index 1 2 value a b c self-swap

50 void enumerate(int n) {
int i; if (1 == n) printf("%s\n", a); else for (i = 0; i < n; i++) { swap(i, n-1); enumerate(n-1); swap(n-1, i); } enumerate(3) % a.out bca cba cab acb bac abc Unix array a index 1 2 value a b c


Download ppt "Enumerating all Permutations"

Similar presentations


Ads by Google