生成可重集的排列
2014-07-24 16:31
309 查看
下面给出自己编写的代码:
还有一种是调用c++中stl库函数:next_permutation.
#include<stdio.h> int P[100],A[100]; 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 i, n; scanf("%d", &n); for(i = 0; i < n; i++) scanf("%d", &P[i]); print_permutation(n, P, A, 0); return 0; }
还有一种是调用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; }
相关文章推荐
- 入门经典 第七章 7.2.2 生成可重集的排列
- UVA146生成可重集的下一个排列
- 生成1~n的排列和生成可重集的排列
- 生成可重集的排列
- 生成可重集的排列
- 生成可重集的排列
- 生成可重集的排列(方法)
- 暴力搜索专题小结:全排列及可重集排列生成算法
- 生成可重集的排列
- 生成可重集排列
- 枚举排列问题:生成1-n的排列和可重集排列问题
- 枚举排列----生成可重集的排列
- 生成可重集排列
- 生成可重集的排列
- n排列生成与可重集排列
- 生成可重集的排列
- 暴力求解法_枚举排列(生成1~n 的排列,生成可重集的排列,下一个排列)
- Poj-1731 Orders(生成可重集的排列)
- 生成可重集的排列
- 生成可重集的排列模板