C++求数组子集

这篇博客探讨了如何使用C++编程语言求解数组的所有子集问题。作者介绍了针对输入数组{0, 1, 2},期望得到如{ }, {0}, {1}, {2}, {1, 2}, {1, 3}, {2, 3}, {1, 2, 3}这样的输出。文章提到,虽然网上有多种方法(如二叉树、递归、位运算),但没有找到按照特定顺序生成子集的解决方案。因此,作者自行设计了一个算法,该算法基于传统遍历方式,逐步添加数组元素形成子集。最后,作者总结这种方法在时间复杂度上是最优的,且实现思路直观。" 98315475,8669638,Linux TC命令:流量控制与IP、协议限制,"['网络', '操作系统', 'Linux命令行', '网络管理', '流量限制']
摘要由CSDN通过智能技术生成

C++求数组子集

本文的写作缘由是最近遇到了编写代码解决TSP问题,其中涉及到了求数组的子集,尽管我可以按照题目中给出的数组自己手动构造子集,但是我觉得那样得来并不是很踏实,还是想要写一个程序来更灵活的获取数组所有子集。

举例

输入:

{0,1,2}

输出:

{ },{0},{1},{2},{1,2},{1,3},{2,3},{1,2,3}

开始的时候我从网上查了很多,发现有很多种方法去求子集(二叉树,递归,位运算等),但是我并没有看到能够按照这个顺序来生成数组子集的方法。所以我最终还是自己写了算法。
算法的整体思路不是很难,就是用了我们以往学过的知识,首先找到空集,然后每个元素算一个子集,之后算两个元素的子集。

为了形象一点,我打算直接画个图来说明,从下面这张图我们可以看到,求子集的过程就是从元素由0个,到N个的不断推导的过程,每一层在前一层的基础上,按照上层最后的一个元素向后遍历数组,并加上一个元素。
在这里插入图片描述

下面直接上代码
#include<iostream>
#include<vector>
using namespace std;
struct Subset  //此结构体表示我们的每个子集
{
   
	int index;//本子集中最后一个元素对应到数组的下标
	vector<int> v;  //子集用vector数组来表示,方便
};
int get_subset_num(int num) {
   //获取数组的子集总个数
	int sum = 1;
	for (int i =</
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值