回溯法求数字1,2,……n 的所有子集

来源:互联网 发布:java 简单的审批流程 编辑:程序博客网 时间:2024/05/19 01:59

求数字1,2,n 的所有子集,用一个数组position来保存每次要回溯时的位置,而且每次前进时的位置起点为上一次位置的后一个位置开始。

#include <iostream>#include <vector>#define MAX 4using namespace std;vector<int> vec{1,2,3,4};vector<int> ans;   //保存结果vector<int> position(n,-1);//保存每次回溯时的位置void print(vector<int> &v){cout<<"{ ";for(auto x:v)cout<<x<<' ';cout<<'}'<<endl;return;}void huisu(){int k=0;while(k>=0){while(position[k]<MAX-1){position[k]+=1;ans.push_back(vec[position[k]]);print(ans);if(k==MAX-1){ans.pop_back();break;}++k;position[k] = position[k-1];}ans.pop_back();--k;}cout<<"{ }"<<endl;}int main(int argc, char** argv) {huisu();return 0;}

0 0
原创粉丝点击