生成可重集的排列
来源:互联网 发布:江边城外 知乎 编辑:程序博客网 时间:2024/05/16 18:55
#include <cstdio>#include <cstring> int P[10];void print_permutation(int n,int * A,int cur){ if(n == cur) { 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++; //在P中出现的次数 for(int j = 0;j < n;j++) if(P[i] == P[j]) c2++; //!判断是用 == if(c1 < c2) { A[cur] = P[i]; print_permutation(n,A,cur+1); } } } } int main(){ int A[50],n; scanf("%d",&n); memset(A,0,sizeof(A)); for(int i = 0; i < n ; i++ ) scanf( "%d", &P[i] );//scanf要写&!!! print_permutation(n,A,0); return 0;}
有了个有点像桶排序的方法表示元素在这个集合里出现的次数
#include <cstdio>#include <cstring>int num[10] = {}; void print_permutation(int n,int * A,int * P,int cur){ if(n == cur) { 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; for(int j = 0;j < cur;j ++) if(A[j] == P[i]) c1++; if(c1 < num[P[i]]) { A[cur] = P[i]; print_permutation(n,A,P,cur + 1); } } } int main(){ int A[10],P[10],n; scanf("%d",&n); for(int i = 0;i < n;i ++) { scanf("%d",&P[i]); num[P[i]] ++; //有点像桶排序的方法 } print_permutation(n,A,P,0); return 0;}
阅读全文
0 0
- 生成可重集的排列
- 生成可重集的排列
- 生成可重集的排列
- 生成可重集的排列
- 生成可重集的排列
- 生成可重集的排列
- 生成可重集的排列
- 生成可重集的排列
- 生成1~n的排列和生成可重集的排列
- 生成1~n的排列,以及生成可重集的排列
- 生成可重集的排列模板
- 生成1~n的排列 生成可重集的排列 下一个排列
- 暴力求解法_枚举排列(生成1~n 的排列,生成可重集的排列,下一个排列)
- UVA146生成可重集的下一个排列
- 7.2.2生成可重集的排列
- 排列的生成
- 全排列的生成
- 全排列的生成
- 机器学习中的正则化处理
- Oracle-SQL命令复习总结_1
- Round 3 D
- 第一章面试题整理
- 字符设备驱动高级篇4——设备类(自动创建和删除设备文件的作用)相关代码分析
- 生成可重集的排列
- C++第四节课
- 2017 四川省赛 D.Dynamic Graph
- 在Mac上安装mongodb
- 5-24 约分最简分式 (15分)
- 二级缓冲
- POSIX 信号
- 网络编程常识汇总.
- 7.16