生成可重集排列

原创 2015年11月18日 11:43:49
//要注意的问题是:p数组一定要事先排好序
#include<iostream>
#include<cstdio>
using namespace std;
int p[5] = {1, 1, 1, 1, 2};
int a[5];

void print_permutation(int n, int* A, int* P, int cur){
	if(cur == n){
		for(int i = 0; i < n; i++) printf("%d", A[i]);
		printf("\n");
	}
	else 
	for(int i = 0; i<n; i++)
	if(!i||P[i]!=P[i-1])//这个if判断的作用就是去掉重复的排列
		 {
			int c1 = 0, c2 = 0;
			for(int j = 0; j < cur; j++) if(A[j] == P[i]) c1++;  //c1是当前元素在已经排好的数组中的个数 
			for(int j = 0; j < n; j++) if(P[j] == P[i]) c2++;   //c2是当前元素在待排数组中的总个数 
			if(c1 < c2){
				A[cur] = P[i];
				print_permutation(n, A, P, cur+1);
			}
				
		}
}
int main() {
	print_permutation(5, a, p, 0);
	return 0;
}

生成1~n的排列,以及生成可重集的排列

#include using namespace std; void printPermutation(int n, int* A, int cur) { if (cur == n) { // ...
  • zyq522376829
  • zyq522376829
  • 2015年06月20日 22:17
  • 405

暴力搜索专题小结:全排列及可重集排列生成算法

1~n的全排列 (1)思路:按照递归的思想,初始化集合S中含有1~n所有元素。如果1~n的集合S为空,那么输出全排列;否则从小到大依次考虑每个元素i,在A的末尾添加i后,集合S变为S-{i}。这里我...
  • u014800748
  • u014800748
  • 2015年04月05日 16:55
  • 1065

生成可重集的排列

自己重写的下一个排列函数 #include #include using namespace std; #define N 100000 int p[N]; int _next_permut...
  • barry283049
  • barry283049
  • 2015年01月03日 17:04
  • 527

算法--生成可重集排列

在生成1~n的排列一文中,我们获取排列时用了控制不相等来实现让每个数都不重复地出现,所以如果要生成含有重复元素的全排列,对对生成1~n的排列的程序适当修改即可。 首先,把各个元素改成用户输入,输入数组...
  • hhhzua
  • hhhzua
  • 2015年04月05日 19:58
  • 336

7.2.2生成可重集的排列

includeincludeusing namespace std;void print(int n,int *p,int *a,int cur) { if(cur==n) { ...
  • UncleJokerly
  • UncleJokerly
  • 2017年11月02日 22:05
  • 104

生成可重集的排列模板

生成可重集的排列模板
  • tengfei461807914
  • tengfei461807914
  • 2016年09月28日 20:58
  • 143

最长k可重区间集问题

最长k可重区间集问题 Time Limit 1000ms Memory Limit 65536K description 给定实直线L 上n ...
  • BlackJack_
  • BlackJack_
  • 2017年05月18日 08:43
  • 202

线性规划与网络流第22题 最长k可重线段问题 !!!!!!!!!!!!!!!!

//线性规划与网络流第22题 //最长k可重线段问题 //20分/100分 程序 //感觉是数据有误T_T #include #include #include #include #include ...
  • chm517
  • chm517
  • 2014年08月03日 14:08
  • 310

可重集的排列

public class B23 { public static void eachArrangement(int[]A,int []P,int cur){ if(cur==P.l...
  • zs064811
  • zs064811
  • 2013年11月26日 16:49
  • 525

【网络流24题】最长k可重线段集(费用流)

题面Cogs的数据有问题 Loj 洛谷题解这道题和最长k可重区间集没有区别 只不过费用额外计算一下但是,还是有一点要注意的地方 这里可以是一条垂直的直线 所以,首先把所有的x轴全部乘2 如...
  • qq_30974369
  • qq_30974369
  • 2018年01月06日 15:16
  • 39
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:生成可重集排列
举报原因:
原因补充:

(最多只允许输入30个字)