c++用递归输出集合的子集,要求子集中的元素相差1以上
时间: 2024-06-06 13:08:08 浏览: 67
C/C++ 求一个集合的子集
#include <iostream>
#include <vector>
using namespace std;
void generateSubset(vector<int>& nums, vector<int>& subset, int start, vector<vector<int>>& res) {
if (subset.size() >= 2) { // 若当前子集中元素个数 >= 2
bool flag = true;
for (int i = 1; i < subset.size(); i++) {
if (abs(subset[i] - subset[i - 1]) <= 1) { // 若相邻元素差小于等于1
flag = false;
break;
}
}
if (flag) { // 若子集中相邻元素差大于1
res.push_back(subset); // 将子集加入结果集
}
}
for (int i = start; i < nums.size(); i++) {
subset.push_back(nums[i]); // 将当前元素加入子集
generateSubset(nums, subset, i + 1, res); // 递归生成子集
subset.pop_back(); // 回溯,弹出最后一个元素,生成下一个子集
}
}
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int>> res;
vector<int> subset;
generateSubset(nums, subset, 0, res);
return res;
}
int main() {
vector<int> nums = {1, 2, 3, 4};
vector<vector<int>> res = subsets(nums);
for (auto subset : res) {
for (auto num : subset) {
cout << num << " ";
}
cout << endl;
}
return 0;
}
阅读全文