子集生成方法

给出一个不含重复元素的集合,求得其子集的各种情况并输出!

 

方法一:增量构造法

             思路是一次选出一个元素放到集合中去,程序如下:

代码:

#include
#define N 100
int p[N+2],num[N+2];
int cmp(const void *a, const void *b) {
	return *(int *)a-*(int *)b;
}
void print_subset(int n, int *p, int cur){
    int i,s;
    for(i=0;i


 方法二:位向量法

            思路是用一组向量p[i], 如果值为1,则表示了选择了num[i],否则没选。这种方法需要遍历到头之后才能得到一组解,效率低于方法一

代码:

#include
#include
#include
#define N 100
int p[N+2],num[N+2];
int cmp(const void *a, const void *b) {
	return *(int *)a-*(int *)b;
}
void print_subset(int n,int cur){
    int i,flag;
	if(cur==n) {
		for(i=0,flag=0;i

 

方法三:二进制法,不是很懂。。。

代码:

#include
#include
#define N 100
int p[N+2];
void print_subset(int n,int s) {
    int i,flag;
    for(i=0,flag=0;i



 

你可能感兴趣的:(回溯法)