标签: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