枚举排列与子集生成

按字典序输出1~n的所有排列。

#include
#include
#include
using namespace std;
void print_permutation(int n,int* A,int cur)
{
	if(cur==n){
		for(int i=0;i

生成可重集的排列

#include
#include
#include
using namespace std;
void print_permutation(int n,int* P,int* A,int cur)
{
	if(cur==n){
		for(int i=0;i

注意:1.考虑递归程序,考虑第一个元素,是必须要试的,考虑第n个元素,由于已经排好序,如果a[n]等于a[n-1]则说明当前位置该元素(的值)已经试过了,故跳过。

2.别忘了排序。

下一个排列(调用函数)

#include
#include
#include
using namespace std;
int main() 
{
     int n,p[10];
     scanf("%d",&n);
     for(int i=0;i

总结:两种方法,一递归排序,二STL。

子集生成

1.增量构造法

#include
#include
#include
using namespace std;
void print_subset(int n,int* A,int cur)
{
	for(int i=0;i

用于生成0~n-1的子集。

2.位向量法

#include
#include
#include
using namespace std;
void print_subset(int n,int* B,int cur)
{
	if(cur==n){
		for(int i=0;i

3.二进制法

#include
#include
#include
using namespace std;
void print_subset(int n,int s)
{
	for(int i=0;i

这个好简单,哈哈哈。

你可能感兴趣的:(枚举排列与子集生成)