蛮力法求解幂集问题
直接穷举求解,将1-n存放到数组a中,求解问题变为构造集合a的所有子集合。设集合a[0…2]={1,2,3},其所有集合元素对应的二进制位及其十进制位如下表所示。
集合元素 | 对应的二进制位 | 对应的十进制位 |
---|---|---|
{ } | — | — |
{1} | 001 | 1 |
{2} | 010 | 2 |
{1,2} | 011 | 3 |
{3} | 100 | 4 |
{1,3} | 101 | 5 |
{2,3} | 110 | 6 |
{1,2,3} | 111 | 7 |
因此对于含有n(n≥1)个元素的集合a,求幂集的过程如下
for(i=0;i<2^n;i++) //穷举a的所有集合元素并输出
{
将i转换为二进制b;
输出b中为1的位对应的a元素构成的一个集合元素;
}
采用直接穷举法求a={1,2,3}的幂集的完整程序如下:
//蛮力法求解幂集问题
#include <stdio.h>
#include <math.h>
#define MaxN 10
void inc(