可重集全排列

来源:互联网 发布:指南针多空资金源码 编辑:程序博客网 时间:2024/05/22 06:19
可重集的全排列int n;int a[maxn];int p[maxn];void dfs(int step){    if(step==n)    {        for(int i = 0;i<n;i++)        {            printf("%d ",a[i]);        }        printf("\n");    }    else    {        for(int i= 0;i<n;i++)        {            if(!i||a[i-1]!=a[i])            {                int sum1 = 0;                int sum2 = 0;                for(int j = 0;j<n;j++) if(p[j]==p[i]) sum1++;                for(int j =0;j<step;j++) if(a[j]==p[i]) sum2++;                if(sum2<sum1)                {                    a[step] = p[i];                    dfs(step+1);                }            }        }    }}void solve(){    cin>>n;    for(int i = 0;i<n;i++)    {        scanf("%d",&p[i]);    }    dfs(0);}
0 0
原创粉丝点击