可重集全排列
来源:互联网 发布:指南针多空资金源码 编辑:程序博客网 时间:2024/05/22 06:19
可重集的全排列int n;int a[maxn];int p[maxn];void dfs(int step){ if(step==n) { for(int i = 0;i<n;i++) { printf("%d ",a[i]); } printf("\n"); } else { for(int i= 0;i<n;i++) { if(!i||a[i-1]!=a[i]) { int sum1 = 0; int sum2 = 0; for(int j = 0;j<n;j++) if(p[j]==p[i]) sum1++; for(int j =0;j<step;j++) if(a[j]==p[i]) sum2++; if(sum2<sum1) { a[step] = p[i]; dfs(step+1); } } } }}void solve(){ cin>>n; for(int i = 0;i<n;i++) { scanf("%d",&p[i]); } dfs(0);}
0 0