題目
設計一個遞歸算法求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;
}
運行結果: