#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循环进行四次的判断。