求序列的排列
2018-02-20 22:18
197 查看
输入数组P元素序列,生成其排列序列(可以有重复元素) 若要生成字典序的序列要求P数组初始为字典序
#include<iostream> #include<algorithm> #include<cstdio> #include<cstring> #include<cmath> #include<string> #include<sstream> #include<queue> #include<stack> #include<set> #include<map> using namespace std; const int maxn = 1e5; int A[maxn],P[maxn]; void print_permutation(int n, int *P, int *A, int cur) { //函数功能:根据P数组的序列生成可重集的排列 if(cur == n) //递归边界 { for(int i = 0; i < n; i++) printf("%d ", A[i]); printf("\n"); } else for(int i = 0; i < n; i++) //在A[cur]填数 { 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[i] == P[j]) c2++; if(c1 < c2) { A[cur] = P[i]; print_permutation(n, P, A, cur + 1); } } } } int main() { int n;//n是P数组的下标上限 cin>>n; for(int i=0;i<n;i++) cin>>P[i];//输入P[0]~P print_permutation(n, P, A, 0); return 0; }
相关文章推荐
- (POJ 3687)Labeling Balls [逆top序列] 求按照某种排列方式的字典序最小的top序列
- 扑克序列 (排列)
- hdu1027 给出n,m,求n个数的按字典序排列的第m个序列
- Problem Description 有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序。 Input 输入数据包含多个测试实例,每组数据由两行组成,第一行是n和m,第二行是已经有序的n个数的数列。n和m同时为0标示输入数
- hdu1027(n个数的按字典序排列的第m个序列)
- 有两个序列A和B,A=(a1,a2,...,ak),B=(b1,b2,...,bk),A和B都按升序排列,对于1<=i,j<=k,求k个最小的(ai+bj),要求算法尽量高效
- 排列组合算法1:生成全部有序列
- 任意数字、字符序列,输出它们所有的排列组合
- 给定一个整数(字符串也适用)序列,重新排列,得到最大的结果,比如31,3,35,7,9根据排列后得到组合 9735331,返回的是string类型
- C语言冒泡序列把数字从大到小排列
- 全排列的本质——康托展开以及本质原理分析——选取第N个——由序列推知第几个
- 蓝桥杯2017模拟题-排列序列
- 3的方幂及不相等的3的方幂的和排列成递增序列1,3,4,9,10,12,13……,写出数列第300项
- LeetCode 60. Permutation Sequence(排列序列)
- 51nod 排列与交换 序列dp
- 顺序表的应用举例(顺序表A和顺序表B的元素都是非递减排列,利用顺序表的基本运算,将它们合并成一个顺序表C,要求C也是非递减序列。)
- 打印给定一个数组序列的所有的排列的类n皇后问题
- 排列组合算法1:生成全部有序列b
- 【Good Bye 2014B】【Floyd or 并查集】New Year Permutation 全排列有位置交换序列 使得字典序尽可能小
- 递增序列排列