标签:
R={r1,r2,r3,...,rn};Perm(R)表示R的全排列
全排列问题,R的全排列递归定义如下:
1、当n=1时, Perm(R)={r};
2、当n>1时, Perm(R)=(r1)Perm(r1),(r2)Perm(r2),...,(rn)Perm(rn);
#include <stdio.h> #include <stdlib.h> #include <algorithm> #include <iostream> #define MAX 105 using namespace std; ///产生元素k~m的全排列,作为前k-1个元素得后缀 void Perm(char a[],int k,int m) { ///构成一次全排列,输出结果 if(k==m) { for(int i=0;i<=m;i++) printf("%c",a[i]); printf("\n"); } else { for(int j=k;j<=m;j++) { swap(a[k],a[j]); Perm(a,k+1,m); swap(a[k],a[j]); } } } int main() { char a[MAX]; int i; scanf("%s",a); for(i=0;i<MAX;i++) if(a[i]==‘\0‘) break; Perm(a,0,i-1); return 0; }
标签:
原文地址:http://www.cnblogs.com/TreeDream/p/5238248.html