生成可重集的排列
2015-02-11 19:20
239 查看
输入数组p,并按字典序输出数组A各元素的所有全排列。
C++的STL中提供一个库函数next_permutation.
#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; }
相关文章推荐
- [Day 1] 7.2.2 生成可重集的排列(包括利用STL)
- 生成可重集的排列模板
- 生成可重集的排列
- 生成1~n的排列,以及生成可重集的排列
- 算法--生成可重集排列
- 7.2.2生成可重集的排列
- 生成1~n的排列,以及生成可重集的排列
- 枚举生成可重集排列
- 生成1~n的排列 生成可重集的排列 下一个排列
- UVA146生成可重集的下一个排列
- 生成1~n的排列和生成可重集的排列
- 生成可重集的排列
- 生成可重集的排列
- 生成可重集的排列
- 生成可重集的排列(方法)
- 枚举排列问题:生成1-n的排列和可重集排列问题
- 入门经典 第七章 7.2.2 生成可重集的排列
- 暴力搜索专题小结:全排列及可重集排列生成算法
- 生成可重集的排列
- 生成可重集排列