标签:blog io for 2014 log on c r as
字典序排列:一个个的递归填充;
1:1-n的全排列
int n; void permutation(int cur,int *A) { if(cur==n) { for(int i=0;i<n;i++) printf("%d ",A[i]); printf("\n"); return; } for(int i=1;i<=n;i++) { int ok=0; for(int j=0;j<cur;j++) //判断前面是否出现过 if(A[j]==i){ ok=1; break; } if(ok==0) { A[cur]=i; permutation(cur+1,A); } } }
2:可重集的全排列
int p[100]; int n; void permutation(int cur,int *A) { if(cur==n) { for(int i=0;i<n;i++) printf("%d ",A[i]); printf("\n"); system("pause"); return ; } for(int i=0;i<n;i++) { if(!i||p[i]!=p[i-1]) //注意,防止出现重复 { int c1=0,c2=0; //计数器 for(int j=0;j<cur;j++) if(p[i]==A[j]) c1++; for(int j=0;j<n;j++) if(p[j]==p[i]) c2++; if(c1<c2) { A[cur]=p[i]; permutation(cur+1,A); } } } } int main() { int A[100]; p[0]=1; p[1]=2; p[2]=3; p[3]=3; p[4]=3; p[5]=4; p[6]=5; n=7; permutation(0,A); return 0; }
标签:blog io for 2014 log on c r as
原文地址:http://blog.csdn.net/code_or_code/article/details/39255517