有一个含n个数的数组a,所有元素均不相同,设计一个算法求其所有子集(幂集)。
例如:1 2 3的幂集{}、{3}、{2}、{2,3}、{1}、{1,3}、{1,2}、{1,2,3}
输入格式:
第一行输入元素个数n,再依次输入n个数。
输出格式:
输出子集数
输入样例1:
3
1 2 3
输出样例1:
8
代码
#include <iostream>
using namespace std;
#define MAX 100
int n;
int a[MAX];
int v[MAX] = {0};
int num = 0;
void dfs(int a[], int i, int n, int v[])
{
if (i > n)
{
num++;
}
else
{
v[i] = 0;
dfs(a, i + 1, n, v);
v[i] = 1;
dfs(a, i + 1, n, v);
}
}
int main()
{
cin >> n;
for (int i = 0; i < n; i++)
cin >> a[i];
dfs(a, 1, n, v);
cout << num << endl;
return 0;
}