算法竞赛-7.3.1增量构造法

增量构造法(0~n-1子集)

思路:一次选出一个元素放入集合中,程序如下:

#include

#include

using namespace std;

 

intA[10];// A数组的下角标分别表示 (0~n-1)集合

 

voidprint_subset(int n,int* A,int cur)

{

    //cur :当前位置

    for(int i=0;i打印当前元素

    {

        cout<

    }

    cout<

    int s=cur?A[cur-1]+1:0;//确定当前元素的最小可能值

    //每次选出一个元素当子集的首元素,

    for(int i=s;i

    {

        A[cur]=i;

        print_subset(n,A,cur+1);//递归构造子集

    }

}

int main()

{  

    int n;

    cin>>n;

    print_subset(n,A,0);

    return 0;

}

n=2为例,有些时候自己遇到不懂的,数形结合,把自己当作计算机把程序运行一遍,问题就迎刃而解了。

算法竞赛-7.3.1增量构造法_第1张图片










你可能感兴趣的:(算法竞赛-7.3.1增量构造法)