- #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;
- }