码迷,mamicode.com
首页 > 其他好文 > 详细

枚举排列

时间:2014-09-13 22:54:36      阅读:368      评论:0      收藏:0      [点我收藏+]

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!