生成可重集的排列
来源:互联网 发布:工业生产总值数据 编辑:程序博客网 时间:2024/06/02 08:55
输入数组p,并按字典序输出数组A各元素的所有全排列。
#include<cstdio>#include<cstring>#include<cstdlib>void print_permutation(int n,int *p,int *A,int cur){ int i, j; if(cur == n) { for(i = 0; i < n; i++) printf("%d ",A[i]); printf("\n"); } else for(i = 0; i < n; i++) { if(!i || p[i] != p[i-1]) { int c1 = 0, c2 = 0; for(j = 0; j < cur; j++) if(A[j] == p[i]) c1++; for(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, A[100], cur = 0; int p[100]; scanf("%d",&n); for(int i = 0; i < n; i++) scanf("%d",&p[i]); print_permutation(n,p,A,cur);}
C++的STL中提供一个库函数next_permutation.
#include<cstdio>#include<algorithm>using namespace std;int main(){ int n, p[10]; scanf("%d",&n); for(int i = 0; i < n; i++) scanf("%d",&p[i]); sort(p,p+n); do { for(int i = 0; i < n; i++) printf("%d",p[i]); printf("\n"); } while(next_permutation(p,p+n)); return 0;}
0 0
- 生成可重集的排列
- 生成可重集的排列
- 生成可重集的排列
- 生成可重集的排列
- 生成可重集的排列
- 生成可重集的排列
- 生成可重集的排列
- 生成可重集的排列
- 生成1~n的排列和生成可重集的排列
- 生成1~n的排列,以及生成可重集的排列
- 生成可重集的排列模板
- 生成1~n的排列 生成可重集的排列 下一个排列
- 暴力求解法_枚举排列(生成1~n 的排列,生成可重集的排列,下一个排列)
- UVA146生成可重集的下一个排列
- 7.2.2生成可重集的排列
- 排列的生成
- 全排列的生成
- 全排列的生成
- hdu 1695 GCD 欧拉函数+容斥 ||莫比乌斯反演
- Android:修改ListView默认滑动条样式
- 与运算代替模运算小记
- 1020. 月饼 (25)
- 【Java编程思想--学习笔记(一)】访问控制-包
- 生成可重集的排列
- 杭电--2015 偶数求和
- 欢迎使用CSDN-markdown编辑器
- 数组
- hdu 5014 贪心+位处理
- 运算符优先级
- android json解析及简单例子
- C++ static 类成员
- arduino mega2560与HC-06蓝牙模块使用