您的位置:首页 > 其它

求序列的排列

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  序列的排列
相关文章推荐