2007-07-04

【遞迴】字串的排列組合

問題:
假若給一字串abc , 寫一程式能夠印出其所有的排列組合
abc acb bac bca cba cab

想法:
n為字串長度
讓所有字元皆出現在第n位置一次
abc
acb
cba
接著分n組個別探討,此時第n位置已固定
m為剩下字元,讓剩下所有字元皆出現在第m位置一次

依此類推,當n為1時直接印出字串,即完成。

用C語言實作:

#include <stdio.h>

void p(char *str, int n) {
char ch ;
int i ;
if(n==1) {
printf("%s\n", str) ;
}
else {
for(i=n-1 ; i>=0 ; i--) {
ch = *(str+i) ;
*(str+i) = *(str+n-1) ;
*(str+n-1) = ch ;
p(str, n-1) ;
ch = *(str+i) ;
*(str+i) = *(str+n-1) ;
*(str+n-1) = ch ;
}
}
}

int main() {
char ch[] = "abcd" ;
p(ch, 4) ;
system("pause") ;
return 0 ;
}

【關鍵字:字串排列組合、Permutation、遞迴】

沒有留言: