05.29 算法竞赛 枚举排列~7.2.2

生成可重复集

代码:#include

#include

#include

#include

#include

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

  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

  if(A[j]==P[i]) c1++;

  for( j=0; j

  if(P[i]==P[j]) c2++;

  if(c1

  A[cur]=P[i];

  print_permutation(n,P,A,cur+1);

  }

 

}

}

 

int main()

{

int n;

scanf("%d",&n);

for(int i=0;i

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

sort(P,P+n);

print_permutation(n,P,A,0);

return 0;

}

图片发自App

图片发自App

你可能感兴趣的:(05.29 算法竞赛 枚举排列~7.2.2)