(子集生成算法)

#include
#include
using namespace std;
//子集生成算法
//增量构造法
void aprint_subset(int n,int*A,int cur){
    for(int i=0;i         printf("%d ",A[i]);
    printf("\n");
    int s=cur? A[cur-1]+1:0;
    for(int i=s;i         A[cur]=i;
        aprint_subset(n,A,cur+1);
    }
}
//位向量法
void print_subset(int n,int*B,int cur){
    if(cur==0){
        for(int i=0;i             if(B[i])printf("%d ",i);
        printf("\n");
        return ;
    }
    B[cur]=1;
    print_subset(n,B,cur+1);
    B[cur]=0;
    print_subset(n,B,cur+1);
}
//二进制法
void bprint_subset(int n,int s){
    for(int i=0;i         if(s&(1<     printf("\n");
}
int main(){
    int A[3]={1,2,3};
    //增量构造法
    aprint_subset(3,A,0);
    printf("-------------------------------------\n");
    //位向量法
    print_subset(3,A,0);
    printf("-------------------------------------\n");
    //二进制法
    for(int i=0;i<(1<<3);i++)
        bprint_subset(3,i);
    return 0;
}

你可能感兴趣的:((子集生成算法))