子集生成
程序员文章站
2024-03-21 19:24:28
...
子集生成
1、增量构造法
void print_subset(int n,int *A,int cur){
for(int i=0;i<cur;i++)
printf("%d ",A[i]);
printf("\n");
int s=cur?A[cur-1]+1:0;
for(int i=s;i<n;i++){
A[cur]=i;
print_subset(n,A,cur+1);
}
}
2、位向量法
void print_subset(int n,int *B,int cur){
if(cur==n){
for(int i=0;i<cur;i++)
if(B[i])
printf("%d ",i);
printf("\n");
}
B[cur]=1;
print_subset(n,B,cur+1);
B[cur]=0;
print_subset(n,B,cur+1);
}
上一篇: 带头双向循环链表