题目
设计一个递归算法求n个不同字符的所有全排列。
分析
参见:全排列(递归算法)。
代码
核心代码:
/* 所有字符的全排列 */
/* str[]指的是是字符数组;k指的是n-1;n指的是str数组的长度 */
void perm(char str[],int k,int n) {
int i,j;
char temp;
if(k==0) {// 处理只有一个数的情况
for(j=0; j<n; j++) {
printf("%c",str[j]);
}
printf("\n");// 换行
} else {
for(i=0; i<=k; i++) {
printf("[%c]",str[i]);
temp=str[k];// str[k]与str[i]交换
str[k]=str[i];
str[i]=temp;
perm(str,k-1,n);
temp=str[i];// str[k]与str[i]交换
str[i]=str[k];
str[k]=temp;
}
}
}
完整代码:
#include<stdio.h>
#define maxSize 20
/* 所有字符的全排列 */
/* str[]指的是是字符数组;k指的是n-1;n指的是str数组的长度 */
void perm(char str[],int k,int n) {
int i,j;
char temp;
if(k==0) {// 处理只有一个数的情况
for(j=0; j<n; j++) {
printf("%c",str[j]);
}
printf("\n");// 换行
} else {
for(i=0; i<=k; i++) {
temp=str[k];// str[k]与str[i]交换
str[k]=str[i];
str[i]=temp;
perm(str,k-1,n);
temp=str[i];// str[k]与str[i]交换
str[i]=str[k];
str[k]=temp;
}
}
}
int main() {
char str[]= {'a','b','c'};
int n=3;
perm(str,n-1,n);
return 0;
}
运行结果: