int permuteString(char []);void doPermute(char [], char [], int [], int , int );
main() {
char string[] = “sun”; int stat = permuteString(string);
}
int permuteString(char inString[]) {
int length,i, *used; char *out;
length = strlen(inString);
out = (char *)malloc(length + 1); if(!out) { return 0; }
/* so that printf doesn’t run past the end of buffer */ out[length] = ”; used = (int *)malloc(sizeof(int) * length);
if(!used) { return 0; }
/* start with no letters used, so zero array */ for( i = 0; i < length; i ++) { used[i] = 0; }
doPermute(inString, out, used, length, 0);
free(out);
free(used);
return 1; //success
}
void doPermute(char in[], char out[], int used[], int length, int recurLevel ) {
int i ;
/* base case */
if(recurLevel == length ) {
printf(“%s\n”, out);
return;
}
/* recursive case */
for(i = 0; i < length ; i ++) {
if(used[i]) {
continue;
}
out[recurLevel] = in[i]; /* put current letter in output */
used[i] = 1; /* mark letter as used */
doPermute(in, out, used, length, recurLevel + 1);
used[i] = 0; /* unmark this letter */
}
}
