05.29 算法竞赛 枚举排列~7.2.2

生成可重复集

代码:#include<iostream>

#include<cstdio>

#include<algorithm>

#include<cstring>

#include<cmath>

using namespace std;

#define ll long long

const int N=1e7+5;//声明一个足够大的数组A;

int A[N];//数组

int P[N];

void print_permutation(int n,int *P,int *A,int cur){//n代表有多少位数。数组A是用来存储,cur确定元素现所在的位置

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 c1=0,c2=0;

  for(int 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;

scanf("%d",&n);

for(int i=0;i<n;i++)

  scanf("%d",&P[i]);

sort(P,P+n);

print_permutation(n,P,A,0);

return 0;

}

图片发自简书App

图片发自简书App
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容