回溯法-生成幂集

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

void GetPowerSet(vector<int> s,int i,int n,vector<vector<int>> &result,vector<int>&t){
    if(i>n){
        result.push_back(t);
    }else{
        t.push_back(s[i-1]); GetPowerSet(s,i+1,n,result,t);
        t.pop_back();GetPowerSet(s,i+1,n,result,t);
    }
}

int main(int argc, const char * argv[]) {
    vector<int> s{1,2,3};
    vector<int> t;
    vector<vector<int>> result;
    GetPowerSet(s,1,3,result,t);
    vector<vector<int>>::iterator it1;
    vector<int>::iterator it2;
    for(it1=result.begin();it1!=result.end();it1++){
        for(it2=(*it1).begin();it2!=(*it1).end();it2++){
            cout<<*it2<<" ";
        }
        cout<<endl;
    }
    return 0;
}

要点:

(1)在进行回溯法时我们需要记录深度i,一层一层的往下遍历

(2)在第i层时,我们需要考虑问题的备用选择,在这里只有第i个数的去与留,但是在四皇后问题上,你的位置就有四种可能,需要for循环进行四次的判断。

转载于:https://www.cnblogs.com/jianghaobo/p/6464053.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值