[遞迴] 全排列-C語言
阿新 • • 發佈:2018-12-15
使用此方法很容易能理解該遞迴演算法
#include<stdio.h>
#include<string.h>
void swap(char *a, char *b) {
char tmp;
tmp = *a;
*a = *b;
*b= tmp;
}
void permutation(char* str,int sbegin,int send) //全排列的非去重遞迴演算法
{
int i;
if(sbegin == send) //當 sbegin = send時輸出
{
for( i = 0; i<=send; i++) //輸出一個排列
printf("%c", str[i]);
printf("\n");
}
else
{
for( i = sbegin; i <= send; i++) //迴圈實現交換和sbegin + 1之後的全排列
{
swap(&str[i], &str[sbegin]); //把第i個和第sbegin進行交換
permutation(str, sbegin + 1, send);
swap (&str[i], &str[sbegin]); //【注1】交換回來
}
}
}
int main() {
char tmp[50];
scanf("%s", tmp);
printf("全排列:\n");
permutation(tmp, 0, strlen(tmp)-1);
}