幂集(回溯法) pta

有一个含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 
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;
}

 

你可能感兴趣的:(蓝桥杯,深度优先,c++)