求集合的幂

《数据结构》严蔚敏 算法6.14

// exam1.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std;

void print_set(vector<char> s,int num)
{
	cout<<"Subset Num"<<num<<": ";
	vector<char>::iterator it=s.begin();
	while(it!=s.end())
	{
		cout<<*it<<" ";
		it++;
	}
	cout<<endl<<endl;
}

void power_of_set(vector<char> A,vector<char> B,int n)
{
	static int num=0;
	if(n==A.size())
	{
		num++;
		print_set(B,num);
		return;
	}
	B.push_back(A[n]);
	power_of_set(A,B,n+1);
	B.erase(B.end()-1);
	power_of_set(A,B,n+1);

	return;
}

int main(void)
{
	char ch[3]={'a','b','c'};
	vector<char> A(ch,ch+3);
	vector<char> B;

	power_of_set(A,B,0);

	system("pause");
	return 0;
}


求集合的幂

时间: 2024-10-10 20:12:35

求集合的幂的相关文章

求集合元素的所有非空子集

现有一个包含N个元素的集合S,求集合S的所有子集? 例如:集合S包含三个元素{a, b, c},则它的所有子集为:{ }(空集), {a}, {b}, {c}, {a, b}, {a, c}, {b, c} 和{a, b, c}. 这里先用位操作的思路来求解,具体方法:用2进制Bit位来标记集合中的某个元素是否被选中,1代表选中,0代表未选中.例如集合{a, b, c}的所有子集可如下表示: {a}                       0 0 1 {b}                 

hdu 1856 求集合里元素的个数 输出最大的个数是多少

求集合里元素的个数 输出最大的个数是多少 Sample Input41 23 45 61 641 23 45 67 8 Sample Output42 1 # include <iostream> 2 # include <cstdio> 3 # include <cstring> 4 # include <algorithm> 5 # include <cmath> 6 # include <queue> 7 # define LL

两种求集合所有子集的方法

假设我们有一个求集合的全部子集(包含集合自身)的需求,即有一个集合s,包含两个元素 <a,b>,则其全部的子集为<a,ab,b>. 不难求得,子集个数sn与原集合元素个数n之间的关系为:sn=2^n-1. 本文分别讲述两种实现方法: 一:位图法: 1)构造一个和集合一样大小的数组A,分别与集合中的某个元素对应,数组A中的元素只有两种状态:"1"和"0",分别代表每次子集输出中集合中对应元素是否要输出,这样数组A可以看作是原集合的一个标记位图.

(c++ 实现)山东科技大学 oj 求集合的交并补集(数据结构习题)

Problem A: 求集合的交并补集 Time Limit: 1 Sec  Memory Limit: 4 MBSubmit: 3663  Solved: 1041[Submit][Status][Web Board] Description 任意给定两个包含1-30000个元素的集合A,B(集合中元素类型为任意整型数,且严格递增排列),求A交B.A并B.A-B和B-A集合. Input 输入第一行为测试数据组数.每组测试数据两行,分别为集合A.B.每行第一个数n(1<=n<=30000)为

求集合的子集

package com.xsz.demo; /**     * @author cwqi    * @date 2014-11-19 下午9:55:31    */ public class SubSet { /**  * 求集合的子集  * @param args  */ public static void main(String[] args) { int array[] = {1,2,3}; SubSet.getSubSet(array); } private static void g

两种求集合全部子集的方法

如果我们有一个求集合的所有子集(包括集合自身)的需求,即有一个集合s,包括两个元素 <a,b>,则其所有的子集为<a,ab,b>. 不难求得,子集个数sn与原集合元素个数n之间的关系为:sn=2^n-1. 本文分别讲述两种实现方法: 一:位图法: 1)构造一个和集合一样大小的数组A,分别与集合中的某个元素相应,数组A中的元素仅仅有两种状态:"1"和"0",分别代表每次子集输出中集合中相应元素是否要输出.这样数组A能够看作是原集合的一个标记位图

javascript实现数据结构: 树和二叉树的应用--最优二叉树(赫夫曼树),回溯法与树的遍历--求集合幂集及八皇后问题

赫夫曼树及其应用 赫夫曼(Huffman)树又称最优树,是一类带权路径长度最短的树,有着广泛的应用. 最优二叉树(Huffman树) 1 基本概念 ① 结点路径:从树中一个结点到另一个结点的之间的分支构成这两个结点之间的路径. ② 路径长度:结点路径上的分支数目称为路径长度. ③ 树的路径长度:从树根到每一个结点的路径长度之和. 以下图为例: A到F :结点路径 AEF : 路径长度(即边的数目) 2 : 树的路径长度:3*1+5*2+2*3=19: ④ 结点的带权路径长度:从该结点的到树的根结

【Leetcode】78. Subsets(求集合的子集问题)

78. Subsets(求集合的子集问题) [分析]:求集合的所有子集问题.题目要求子集中元素非递减序排列,因此我们先要对原来的集合进行排序.原集合中每一个元素在子集中有两种状态:要么存在.要么不存在.这样构造子集的过程中每个元素就有两种选择方法:选择.不选择,因此可以构造一颗二叉树,例如对于例子中给的集合[1,2,3],构造的二叉树如下(左子树表示选择该层处理的元素,右子树不选择),最后得到的叶子节点就是子集:{ 链接 } 1 class Solution 2 { 3 private: 4 v

求集合中选一个数与当前值进行位运算的max

求集合中选一个数与当前值进行位运算的max 这是一个听来的神仙东西. 先确定一下值域把,大概\(2^{16}\),再大点也可以,但是这里就只是写写,所以无所谓啦. 我们先看看如果暴力求怎么做,位运算需要给定\(01/10,00,11\)的关系,总共\(8\)种. 如果是暴力的话,我们的方法有两种, 第一种是比较喜闻乐见的, 我们对于当前数\(x\),暴力计算所有存在的数\(a_i\)中,\(x\oplus a_i\)的最大值,这样的复杂度是\(O(2^{16})\)的. 另外一种也是不难考虑到的