用vector容器寻找指定集合所有非空子集

#include <iostream>
#include <vector>
using namespace std;

//loc表示当前位置 loc == len为递归终止条件
void getAllSubSet(int* arr, int len, int loc, vector<vector<int> >&res, vector<int>v) {
    if (loc == len) {
        res.push_back(v);
        return;
    }
    //2中情况   第一种情况 拿当前元素 第二种 不拿当前元素
    getAllSubSet(arr, len, loc + 1, res, v);
    v.push_back(arr[loc]);
    getAllSubSet(arr, len, loc + 1, res, v);
}

int main()
{
    int arr[] = {2,3,4,5,6};
    vector<vector<int> >res;
    for (int i = 0; i < 5; i++) {
        vector<int>v;
        v.push_back(arr[i]); //保证了该位置元素一定取到
        getAllSubSet(arr, 5, i + 1, res, v); //现在进入到下一位置
    }

    //以下为输出结果用
    for(int i = 0; i < res.size(); i++) {
        for (int j = 0; j < res[i].size(); j++) {
            cout << res[i][j] << " ";
        }
        cout << endl;
    }
    cout << res.size();
    return 0;
}

 其中所用的vector<vector<int>>是在c++11之后被支持的。

起作用相当于二维数组。

上一篇:医疗知识图谱_寻医问药


下一篇:在这个情节