子集生成

来源:互联网 发布:捷易通软件下载 编辑:程序博客网 时间:2024/05/22 04:37
#include <iostream>#include <algorithm>using namespace std;//子集生成//增量构造法void print_subset(int a[], int cur, int n){    for(int i=1; i<cur; i++)        cout << a[i] << " ";    cout << endl;    int j = cur? a[cur-1]+1:0;      for(; j<=n; j++)    {        a[cur] = j;        print_subset(a, cur+1, n);    }}//位向量法int b[10];void print_subset1(int a[], int cur, int n){    if(cur > n)    {        for(int i=1; i<cur; i++)            if(b[i])                cout << i << " ";        cout << endl;        return;    }    b[cur] = 1;    print_subset1(a, cur+1, n);    b[cur] = 0;    print_subset1(a, cur+1, n);}//二进制法void print_subset2(int cur, int n){    for(int i=0; i<n; i++)        if(cur & (1<<i))            cout << i+1 << " ";    cout << endl;}int main(){    int a[] = {0, 1, 2, 3};    int n = 3;    cout << "增量构造法:\n";    print_subset(a, 1, 3);    cout << endl;    cout << "位向量法:\n";    print_subset1(a, 1, 3);    cout << endl;    cout << "二进制法:\n";    for(int i=0; i<(1<<n); i++) //枚举各子集对应的二进制编码        print_subset2(i, n);    cout << endl;    return 0;}

这里写图片描述

0 0
原创粉丝点击