递归回溯--全组合

#include <vector>
#include <iostream>


// 辅助函数,用于生成组合
void generateCombinations(const std::vector<int>& nums, int start, std::vector<int>& current, std::vector<std::vector<int>>& result) {
    // 将当前组合加入结果
    result.push_back(current);

    // 从当前位置开始,逐个选择元素加入当前组合,生成新的组合
    for (int i = start; i < nums.size(); ++i) {
        current.push_back(nums[i]); // 将当前元素加入组合
        generateCombinations(nums, i + 1, current, result); // 递归生成以当前元素为起点的新组合
        current.pop_back(); // 回溯,移除当前元素,继续尝试下一个元素
    }
}

// 主函数,生成整数数组的全组合
std::vector<std::vector<int>> generateAllCombinations(const std::vector<int>& nums) {
    std::vector<std::vector<int>> result;
    std::vector<int> current;
    generateCombinations(nums, 0, current, result);
    return result;
}
 

int main() {
    std::vector<int> nums = { 1, 2, 3 };
    std::vector<std::vector<int>> combinations = generateAllCombinations(nums);

    // 打印结果
    for (const auto& combination : combinations) {
        std::cout << "[";
        for (int num : combination) {
            std::cout << num << " ";
        }
        std::cout << "]" << std::endl;
    }

    return 0;
}

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值