zoukankan      html  css  js  c++  java
  • 递归实现求解幂集问题

    幂集,就是一个集合的所有子集,包括空集

    下面附着代码,具体实现的过程代码下面:

    各部分代码如下:

    首先是 headF.h(headFile的意思)

     1 #pragma once
     2 
     3 #include<cstdio>
     4 #include<vector>
     5 
     6 using namespace std;
     7 
     8 extern vector<vector<int>> ps;//存放幂集
     9 
    10 void Insertion(int i);//向幂集ps中的每个集合元素添加i 并插入到ps中
    11 void powerset(int i, int n);//求1~n的幂集ps
    12 void printPowerset();//输出幂集

    之后是 headF.cpp

     1 #include "headF.h"
     2 
     3 vector<vector<int>> ps;
     4 
     5 void Insertion(int i) {
     6     vector< vector<int> > ps1;//子幂集
     7     vector< vector<int> >::iterator it;//幂集迭代器
     8 
     9     ps1 = ps;//ps1存放原来的幂集
    10     for (it = ps1.begin(); it != ps1.end(); it++) (*it).push_back(i);//在ps1的每个集合元素的末尾添加i
    11     for (it = ps1.begin(); it != ps1.end(); it++) ps.push_back(*it);//将ps1的每个集合元素添加到ps中
    12 }
    13 
    14 void powerset(int i, int n) {
    15     if (i <= n) {
    16         Insertion(i);//将i插入到现有子集中产生新的子集
    17         powerset(i + 1, n);//递归调用
    18     }
    19 }
    20 
    21 void printPowerset() {
    22     vector< vector<int> >::iterator it;//幂集迭代器
    23     vector<int>::iterator sit;//幂集集合元素迭代器
    24     int coun = 0;
    25 
    26     for (it = ps.begin(); it != ps.end(); it++) {
    27         printf("{");
    28         coun = 0;
    29         for (sit = (*it).begin(); sit != (*it).end(); sit++) {
    30             if (sit + 1 == (*it).end()) printf("%d", *sit);
    31             else printf("%d,", *sit);
    32             coun++;
    33         }
    34 
    35         printf("}%d  ", coun);
    36     }
    37     printf("
    ");
    38 }

    最后一个:

    #include "headF.h"
    
    int main() {
        int n = 3;
        vector<int> s;
    
        ps.push_back(s);
        powerset(1, n);
        printf("1~%d的幂集:
    ", n);
        printPowerset();
    
        return 0;
    }

    额 其中形式可能有点 不一样的地方,这是因为我为了搞清楚vector是怎么实现的,加的一个计数变量

    实现过程:

    大概就是这样实现的,vector<int> ps 相当于一个一维数组 那么vector< vector<int>>就是一个二维的咯

  • 相关阅读:
    linux 下安装mongodb
    python 多线程, 多进程, 协程
    5.rabbitmq 主题
    4.rabbitmq 路由
    e.target与e.currentTarget对比
    使用ffmpeg下载m3u8流媒体
    本机添加多个git仓库账号
    IE hack 条件语句
    IE8 兼容 getElementsByClassName
    IE 下 log 调试的一点不同
  • 原文地址:https://www.cnblogs.com/letianpaiai/p/13804829.html
Copyright © 2011-2022 走看看