今天想起以前在项目里写的 求子集的方法,当时也是仿照别人的写的,利用一点点位运算,比回溯来求更直观。 可是发现一下子 还是不容易记起来。索性还是记在存储介质上,留待随机访问来得好。
下面的代码是我在网上找到的代码稍微改改而成
int n = 4; //以四个元素为例
int x[4]; //这里只求位置,不列具体元素
void genSubset()
{
for(int i = 0; i < (1 << n); i++)
{
for(int j = 0; j < n; j++)
{
if( (i & (1 << j) ) == 0) //逐位访问,得到元素组合方式,当然非一步之功
x[j] = 0;
else
x[j] = 1;
}
for(int j = 0; j < n; j++)
cout<<x[j];
cout<<endl;
}
}
还是比较直观明了的,当时项目里只求真子集,上面的代码是求全集的例子。