生成可重集的排列

来源:互联网 发布:centos7源码安装nginx 编辑:程序博客网 时间:2024/05/22 15:42

看了刘大大的还是有点不太懂,先记下来慢慢消化。

#include<iostream>#include<algorithm>using namespace std;void print_permutation(int n, int* p ,int* a,int 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(int 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=5;int a[5]={0};int p[5]={1,4,1,4,5}; sort(p,p+5);int cur=0;    print_permutation(n,p,a,cur);}


原创粉丝点击