回 帖 发 新 帖 刷新版面

主题:求集合所有子集

谁告诉下算法思想,谢谢了!

回复列表 (共4个回复)

沙发


每个元素 定义一个bool变量
true存在 false不存在 
就可以吧

板凳

写了一个 交流一下
#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 楼

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 楼

可以用子集树回溯

我来回复

您尚未登录,请登录后再回复。点此登录或注册