看了刘大大的还是有点不太懂,先记下来慢慢消化。
#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);
}