/* Permute a string, but see the footnote! */ #define true 1 #define false 0 main() { int used[4]; char perm[4]; int i, N; N = 4; for(i = 0; i < N; i++) used[i] = false; /* nothing is used, yet */ permute("pops", 4, perm, 0, used); }/*main*/ permute(char A[], int N, char perm[], int level, int used[]) { int i; if(level >= N) /* complete - print a permutation */ { for(i = 0; i < N; i++) printf("%c", perm[i]); printf("\n"); } else /* continue construction of the permutation */ { for(i = 0; i < N; i++) if( ! used[i] ) { used[i] = true; perm[level] = A[i]; /* reserve A[i] */ permute(A, N, perm, level+1, used); /* recursion */ used[i] = false; /* free A[i] */ }//if } }/*permute*/ /* This is NOT a very good program because it is limited to permuting just one string of length 4. Exercise: Generalise it to permute any string which it gets as a command-line parameter. See the directory ../Basic/ for command-line parameters. L. Allison 31/1/2000 */