主题:求集合所有子集
zhougang86
[专家分:0] 发布于 2008-01-06 21:02:00
谁告诉下算法思想,谢谢了!
回复列表 (共4个回复)
沙发
yuanshichao [专家分:0] 发布于 2008-01-06 21:16:00
每个元素 定义一个bool变量
true存在 false不存在
就可以吧
板凳
yuanshichao [专家分:0] 发布于 2008-01-06 22:04:00
写了一个 交流一下
#include<iostream>
using namespace std;
int print(int i,int l);
int str[30];
bool bo[30];
int number;
int main()
{
cout<<"请输入元素个数"<<endl;
int l=0;
cin>>l;
cout<<"请输入元素"<<endl;
for(int i=0;i<l;i++)
cin>>str[i];
print(0,l);
return 0;
}
int print(int i,int l)
{
if(i==l)
{
int j,k=0;
++number;
cout<<"No."<<number<<'=';
cout<<"{";
for(j=0; j<l; j++)
if(bo[j])
{
if(k)
cout<<',';
cout<<str[j];
++k;
}
cout<<"}"<<endl;
return 0;
}
else
{
bo[i]=true;
print(i+1,l);
bo[i]=false;
print(i+1,l);
}
return 0;
}
3 楼
justforfun626 [专家分:18460] 发布于 2008-01-07 00:54:00
To yuanshichao
You don't need a bool array, but only an integer = 2^n - 1
You don't need recursion, iteration is enough.
However, the time complexity is still O(2^n), but just faster by a constant factor.
Try it!
Thanks!
4 楼
diaoxue [专家分:600] 发布于 2008-01-07 12:51:00
可以用子集树回溯
我来回复