【枚举排序】生成可重集排序
来源:互联网 发布:央视网络电视台直播 编辑:程序博客网 时间:2024/05/29 13:36
#include<cstdio>#include<cstdlib>#define MAXN 10void qsort(int a[], int l, int r){ if(l>=r) return; int i=l, j=r, x=a[(i+j)>>1]; a[(i+j)>>1] = a[i]; a[i] = x; do{ while(i<j && a[j] >= x) j--; if(i<j) {a[i] = a[j]; i++;} while(i<j && a[i] <= x) i++; if(i<j) {a[j] = a[i]; j--;} }while(i!=j); a[i] = x; qsort(a, l, i-1); qsort(a, i+1, r);}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]); putchar('\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[j] == P[i]) c2++; if(c1 < c2) { A[cur] = P[i]; print_permutation(n, P, A, cur+1); } }}int main(){ int n, A[MAXN], P[MAXN]; scanf("%d",&n); for(int i = 0; i < n; i++) scanf("%d",&P[i]); //n = 4; qsort(P,0,n-1); for(int i= 0;i< n;i++) printf("%d ",P[i]); print_permutation(n, P, A, 0); return 0;}//10 2 4 0 3 1 9 7 6 2 7
0 0
- 【枚举排序】生成可重集排序
- 枚举排序
- hdu-1425(排序||枚举)
- MPI 枚举排序实现
- OpenMP之枚举排序
- hdu 4864 排序+枚举
- 枚举类型排序
- ACM_生成可重集的排序
- SGU 133 Border 排序+枚举
- MPI并行实现枚举排序
- 枚举排序的MPI实现
- OC中枚举和排序
- LA 4850 Installations (排序+枚举)
- 通过枚举控制比较TreeSet内容排序(实现接口comparator);随机生成一个汉字
- POJ 1256 Anagram(输入可重集枚举排序)
- 生成可重集的排序 (白书P184)
- 递归枚举,子集生成,排列生成,回溯都是解决解答树的方法,通过数值跟踪保存排序过程
- 生成全排序算法
- Erlang类型及函数声明规格
- LINQ to SQL的一些简单用法
- unity获取系统时间
- DIV+CSS教程《第一天 XHTML CSS基础知识》
- malloc/free与new/delete的区别
- 【枚举排序】生成可重集排序
- GridView禁止横向滑动
- Oracle(二)- 笛卡尔积造成的问题(一)
- DIV+CSS教程《第二天 一列布局》
- DB2文件注册表
- android中捕获ontouchlistener问题
- YUV格式到RGB格式的转换
- 设计模式之装饰者模式
- 音乐播放器 vmp 代码部分