生成可重集的排列

来源:互联网 发布:威少刷数据 编辑:程序博客网 时间:2024/06/09 17:33
输入数组p,并按字典序输出p的全排列;
#include <iostream>#include <algorithm>using namespace std;int a[100],p[100];void print_per(int n,int a[],int p[],int cur){    if(cur==n)    {        for(int i=0;i<n;i++){cout<<a[i]<<" ";}        cout<<endl;    }    else    {        for(int i=0;i<n;i++)        {           if(!i||p[i]!=p[i-1])//防止数组p里面的元素都相同时重复输出           {               int c1,c2;               for(int j=0;j<cur;j++)if(a[j]==p[i])c1++;               for(int j=0;j<n;j++)if(a[j]==a[i])c2++;               if(c1<c2)               {                   a[cur]=p[i];                   print_per(n, a,p,cur+1);               }           }        }    }}int main(){    int n;    while(cin>>n)    {        for(int i=0;i<n;i++)            cin>>p[i];        sort(p,p+n);        print_per(n,a,p,0);    }    return 0;}