Pagini recente » Cod sursa (job #1823608) | Cod sursa (job #104676) | Cod sursa (job #733341) | Cod sursa (job #2518705) | Cod sursa (job #2320889)
// CPP program to find all subsets by backtracking.
#include <bits/stdc++.h>
using namespace std;
ifstream fin("submultimi.in");
ofstream fout("submultimi.out");
// In the array A at every step we have two
// choices for each element either we can
// ignore the element or we can include the
// element in our subset
void subsetsUtil(vector<int>& A, vector<vector<int> >& res,vector<int>& subset, int index)
{
for (int i = index; i < A.size(); i++) {
// include the A[i] in subset.
subset.push_back(A[i]);
res.push_back(subset);
// move onto the next element.
subsetsUtil(A, res, subset, i + 1);
// exclude the A[i] from subset and triggers
// backtracking.
subset.pop_back();
}
return;
}
// below function returns the subsets of vector A.
vector<vector<int> > subsets(vector<int>& A)
{
vector<int> subset;
vector<vector<int> > res;
// include the null element in the set.
res.push_back(subset);
// keeps track of current element in vector A;
int index = 0;
subsetsUtil(A, res, subset, index);
return res;
}
int main()
{
int n;
// find the subsets of below vector.
vector<int> array ;
fin>>n;
for(int i=1;i<=n;i++)array.push_back(i);
// res will store all subsets.
// O(2 ^ (number of elements inside array))
// because at every step we have two choices
// either include or ignore.
vector<vector<int> > res = subsets(array);
int i,j;
// Print result
for ( i = 0; i < res.size(); i++) {
for (j = 0; j < res[i].size(); j++)
fout<< res[i][j] << " ";
if(j!=0) fout<<"\n";
}
return 0;
}