1. 程式人生 > >輸出一個集合的所有子集合

輸出一個集合的所有子集合

    set<set<int> > result;
    if (input.size() == 1)       // 集合只有一個元素,子集合就是自己
    {
        set<int> one;
        one.insert(*input.begin());
        result.insert(one);
    }
    else
    {
        int poped = *input.begin();        // 移除第一個元素,第一個元素本身是一個集合
        set<int> aSubset;
        aSubset.insert(poped);
        result.insert(aSubset);

        input.erase(input.begin());
        set<set<int> > tmp = getSubset(input);        // 遞迴獲取除去第一個元素後集合的所有子集
        for (set<set<int> >::iterator it = tmp.begin(); it != tmp.end(); it++)
        {
            result.insert(*it);           // 集合的子集包括了所有去除第一個元素後的子集
            set<int> one = *it;
            one.insert(poped);       // 集合包含了第一個元素 和 去除第一個元素後集合的所有子集組成的集合
            result.insert(one);
        }
    }

    return result;