您的位置:首页 > 其它

输出集合所有子集的算法

2012-09-11 11:28 246 查看
算法描述:把求子集运算转换为组合问题。

假设集合中包含N个元素, 子集合数 = C(N, 0) + C(N, 1) + ... + C(N, N-1) + C(N, N),对于任一个子集合,可以用一个N元组表示,即 <S1, S2, ... Sn-1, Sn>, 其中Si取值范围为(0, 1),0表示不该子集合不包含该元素,1表示该子集合包含该元素。因此,求子集合就转换成了罗列所示可能组合的算法。子集合数 = 2^n。

void sub_sets(int i, int n, char *a, char *b)

{

int j;

if (i >= n)

{

for (j = 0; j < n; j++)

{

if (b[j] == '1')

printf("%c", a[j]);

}

printf("/n");

}

else {

b[i] = '1';

sub_sets(i+1, n, a, b);

b[i] = '0';

sub_sets(i+1, n, a, b);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: