(分享)分治法求子集
//我很早就发现了分治与二进制有着不寻常的关系,果不其然//另一种求子集的方法就是模拟二进制加法, 不过那样写比较丑陋,体现不出咱 bccn 的水平...
//排列、组合、子集都是常见的面试题,希望能够帮助大家轻松的秒杀那些小菜鸟,
#include <stdio.h>
#define NUM 3
int set[NUM+1] = {0, 1, 2, 3};
int subset[NUM+1] = {0};
void divide(int depth);
int main(void)
{
divide(1);
getchar();
return 0;
}
void divide(int depth)
{
int i;
if (depth == (NUM+1))
{
for (i = 1; i < depth; i++)
{
if (subset[i])
{
printf("%d ", set[i]);
}
}
printf("\n");
}
else
{
subset[depth] = 0;
divide(depth+1);
subset[depth] = 1;
divide(depth+1);
}
}