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

枚举生成可重集的排列

时间:2015-01-09 10:23:20      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int N=1e3+10;
int a[N],p[N];
void print_permutation(int n,int *p,int *a,int cur)
{
int i,j;
if(cur==n)
{
for(i=0; i<n; i++)
printf("%d ",a[i]);
printf("\n");
}
else
{
for(i=0; i<n; i++)
if(p[i]!=p[i-1])
{
int c1=0,c2=0;
for(j=0; j<cur; j++)
if(a[j]==p[i])
c1++;
for(j=0; j<n; j++)
if(p[i]==p[j])
c2++;
if(c1<c2)
{
a[cur]=p[i];
print_permutation(n,p,a,cur+1);
}
}
}
}
int main()
{
int n,i;
while(scanf("%d",&n))
{
for(i=0; i<n; i++)
scanf("%d",&p[i]);
sort(p,p+n);
print_permutation(n,p,a,0);
}
return 0;
}

枚举生成可重集的排列

标签:

原文地址:http://www.cnblogs.com/SSYYGAM/p/4212492.html

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