枚举一个集合的所有子集

数字范围是0~9,即集合元素在10个及以下

//Subset.h

#ifndef SUBSET_H
#define SUBSET_H

class Subset
{
    public:
        Subset();
        virtual ~Subset();

        void Find_subset(int cur, int A[], int Asize);
        void Print(int A[], int Asize);
        int Array[10];

    private:
};

#endif // SUBSET_H
//main.cpp

#include <iostream>
#include "Subset.h"

using namespace std;

int main()
{
    int i, num, A[10];
    Subset Array1;
    cin >> num;
    for(i=0; i<num; i++)
    {
        cin >> Array1.Array[i];
    }

    Array1.Find_subset(0, A, num);
    return 0;
}
//Subset.cpp

#include <iostream>
#include "Subset.h"

using namespace std;
Subset::Subset()
{

}

Subset::~Subset()
{

}

void Subset::Find_subset(int cur, int A[], int Asize)
{
    if(cur >= Asize)
    {
        Print(A, Asize);
    }
    else
    {
        A[cur] = Array[cur];
        Find_subset(cur+1, A, Asize);
        A[cur] = -111;
        Find_subset(cur+1, A, Asize);

    }
}

void Subset::Print(int A[], int Asize)
{
    int i;
    for(i=0; i<Asize; i++)
    {
        if(A[i] != -111)
        {
            cout << A[i] << " ";
        }
    }
    cout << endl;
}
输入:3
    1 2 3

输出:1 2 3
     1 2
     1 3
     1
     2 3
     2
     3

刚写完的数据结构课的作业就放上来了,IDE用的是codeblocks,新人一枚,希望各路大神多指点哈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值