一串字母完全不同的字符,输出出全排列。如ABC输出 ABC ACB BAC BCA CAB CBA;
用递归的方法:
将前面的元素依次固定,从后面进行交换,输出。
附上代码,用注释的形式解释
//n为字符长度,k为当前进行到的位数; char a[105]; void cmp(int n,int k) { if (k==n) cout<<a<<endl; else { for (int i=k;i<n;++i) { //一开始是让它自己与自己交换,直到最后一项执行完才开始从后往前交换输出; //最后一项自己交换完之后,就会让最后一个元素和倒数第二个进行交换,然后往前依次进行; swap(a[i],a[k]); cmp(n,k+1); swap(a[i],a[k]); //递归完之后要换回来 } } } int main () { int n; gets(a); n=strlen(a); cmp(n,0); return 0; }