集合子集的两种求法.(写着玩,大家看看)
#include <stdio.h>
#define SIZE 3
int a[] = {1,2,3};
int status[] = {-1,-1,-1};
void next(int l)//利用组合方法直接构造子集
{
int i;
for(i=0;i<SIZE;i++)
if(status[i]!=-1)
printf("%d ",a[status[i]]);
printf("\n");
if(l==SIZE)
return;
for(i=l;i<SIZE;i++)
{
status[l] = i;
next(i+1);
status[l] = -1;
}
}
void enumit(int l)//穷举集合每个元素的状态(0或1)
{
int i;
if(l==SIZE)
{
for(i=0;i<SIZE;i++)
if(status[i] == 0)
printf("%d ",a[i]);
printf("\n");
return;
}
else
{
status[l] = 0;
enumit(l+1);
status[l] = -1;
enumit(l+1);
}
}
int main()
{
//next(0);
enumit(0);
system("PAUSE");
return 0;
}