核心思想:定一,排后;换一,排后。
即先保持第一个元素不变,将后面的元素全排列;之后将第二个元素换为第一元素,再对后全排列;·······
#include <stdio.h>
#include <stdlib.h>
void change(char *a[],int m,int n);
void perm(char *a[],int m,int n);
void print(char *a[],int n);
int main(){
char *a[3]={"我","是","猪,"};
perm(a,0,2);
return 0;
}
void print(char *a[],int n){ //打印函数
int x;
for(x=0;x<n;x++)
printf("%s",a[x]);
printf("\n");
}
void change(char *a[],int m,int n){ //交换函数
char *b=a[m];
a[m]=a[n];
a[n]=b;
}
void perm(char *a[],int m,int n){ //全排列函数
int x;
if(m==n)
print(a,n+1);
else
for(x=m;x<=n;x++){
change(a,x,m);
perm(a,m+1,n);
change(a,x,m);
}
}