[cpp]
#include <stdio.h>
int Swap(char *a,char *b)
{
char c;
c = *a;
*a = *b;
*b = c;
}
/*
* 遞歸思想實現全排列
* 對abc進行全排列,那麼可以看做:ab的全排列+c和ac的全排列+b和bc的全排列+a三個的組合
*/
void Perm(char *list, int k)
{
//排列list數組中k以後的子串
int i;
if ('\0' == list[k]) {//輸出一個排列方式
printf("%s\t",list);
putchar('\n');
}
else
{
for (i=k; list[i]!='\0'; i++) {
Swap (&list[k], &list[i]);
Perm (list, k+1);//全排列右子串
Swap (&list [k], &list [i]);
}
}
}
int main(int argc ,char *argv[])
{
char string[10] = "123";
Perm(string,0);
return 0;
}