把数组中每个元素不重复的取到,并且不超过数组中某个元素的个数。
代码如下
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=1000+5;
int res[maxn]; //统计数组中某个元素出现的次数
void dfs(int *a,int *p,int cur,int n)
{
if(cur==n)
{
for(int i=0;i<n;++i)
{
printf("%d ",a[i]);
}
printf("\n");
}
else for(int i=0;i<n;++i)
{
if(!i||p[i]!=p[i-1])
{
int cnt=0;
for(int j=0;j<cur;++j)
{
if(a[j]==p[i]) ++cnt;
}
if(cnt<res[p[i]])
{
a[cur]=p[i];
dfs(a,p,cur+1,n);
}
}
}
}
int main(){
int n; scanf("%d",&n);
memset(res,0,sizeof(res));
int p[maxn],a[maxn];
for(int i=0;i<n;++i){
scanf("%d",&p[i]);
res[p[i]]++;
}
sort(p,p+n); //排序,方便判定
dfs(a,p,0,n);
return 0;
}
如有不当之处欢迎指出!