189 8069 5689

子集生成

用二进制位的0和1表示集合中是否存在该元素
要生成0~n的子集,先生成0~n的二进制序列,这些序列的0、1位正好可以对应一个子集中全集在该位置上的元素是否存在,将其作为子集中存在的元素的标记,输出对应元素。

专注于为中小企业提供网站制作、做网站服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业永新免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了成百上千企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。

#include
#include
#include
#include

using namespace std;
void subset(int n,int s){
for(int i=0;iif(s&(1<//s&(1<}
printf("\n");
}
int main(){
int n=4;
for(int i=0;i<(1<//i<(1<subset(n,i);
}

#include
#include
using namespace std;

void print_subset_zl(int n,int* A,int cur){//增量构造法
for(int i=0;iprintf("\n");//每次都要输出
int s=cur?A[cur-1]+1:0;//定序,确保只输出一次相同的集合
for(int i=s;iA[cur]=i;
print_subset_zl(n,A,cur+1);
}
}

void print_subset_wxl(int n,int* B,int cur){//传递数组
if(cur==n){
for(int i=0;iprintf("\n");
return;
}
B[cur]=1;//选
print_subset_wxl(n,B,cur+1);
B[cur]=0;//不选
print_subset_wxl(n,B,cur+1);
}

void print_subset_binary(int n,int s){
for(int i=0;iif(s&(1<printf("\n");
}

int main(){
int k[5];
print_subset_zl(5,k,0);
print_subset_wxl(5,k,0);
for(int i=0;i<(1<<5);i++){
print_subset_binary(5,i);
}
return 0;
}


本文题目:子集生成
当前地址:http://cdxtjz.com/article/ihejeg.html

其他资讯