某个集合的子集问题

int WToSigArray(int* A, int n)//消除重复元素
{
	int i,j,k;
	for( i = k = 1; i < n; i++)
	{
		for( j = 0; j < k; j++)
		{
			if(A[j] == A[i])
			{
			  break;
			}
		}

		if(j == k)
		{
		    A[k] = A[i];
		    k++;
		}
	}

	return k;
}

int Subset( int* A, int n, int* B, int m, int cur) //集合A,输出m个元素的子集B
{
	static int number = 0;  

	if(cur == m)
	{
		number++;
		for(int i = 0; i< m; i++)
		{
			printf("%d ", B[i]);
		}
		printf("\n");
	}
	else
	{
		for(int i = 0; i < n; i++)
		{
			int ok = 1;
			for(int j = 0; j < cur; j++)
			{
				if(B[j] == A[i] || B[j] > A[i])
				{
					ok = 0;
				}

			}

			if(ok)
			{
				B[cur] = A[i];
				Subset(A, n, B, m, cur + 1);

			}			

		}
	}

	return number;
}

int WSubset(int* A, int n, int m)
{

        int N = WToSigArray(A, n);
	printf("to single data:\n");
	for(int i = 0; i < N; i++)
	{
		printf("%d ", A[i]);
	}
	printf("\nSubset:\n");
	int   cur = 0;
	int*  B = (int*)malloc(sizeof(int)*m);
	int number = Subset(A, N, B, m, cur);
	delete [] B;
	B = NULL;
	return number;
}

时间: 2024-07-31 14:29:22

某个集合的子集问题的相关文章

集合习题之列出有限集合所有子集

1.题目(<离散数学及其应用>第6版P75 20 题) 给出可以列出有限集合所有子集的步骤. 2.  解题思路 假设有集合A = {a1, a2 … an},列出其所有子集. 先列出含有1个元素的所有子集:{a1},{a2} … {an} 然后列出含有2个元素的所有子集:{a1,a2},{a1,a3}…{an-1,an} 同上所示,一直列到含有n个元素的所有子集 可以看出,问题就简化为求在 A 集合中,求含有固定 x 个元素的所有子集(注意,子集中每个ai只能包含一次). 这实际上类似这么个问

求集合的子集

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

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

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

python 实现求一个集合的子集

概要 今天偶然看到有个关于数学中集合的问题,就突发奇想的想用python实现下求一个集合的子集. 准备 我当然先要复习下,什么是集合,什么是子集? 比较粗犷的讲法,集合就是一堆确定的东西,细致一点的讲法呢,就是由一个或多个确定的元素所构成的整体,集合中的东西称为元素. 集合有一些特性: 1.确定性 给定一个集合,任给一个元素,该元素或者属于或者不属于该集合,二者必居其一,不允许有模棱两可的情况出现. 2.互异性 一个集合中,任何两个元素都认为是不相同的,即每个元素只能出现一次.有时需要对同一元素

59-python基础-python3-集合-集合常用方法-判断一个集合是否是另一个集合的子集-issubset()-issuperset()

判断一个集合是否是另一个集合的子集-issubset()-issuperset() 1-issubset() s1.issubset(s) 判断s1是否是s的子集 2-issuperset() 与issubset()相反 原文地址:https://www.cnblogs.com/summer1019/p/11384528.html

集合的子集输出(位运算方式)

问题:怎样找出某个集合的所有子集,怎样找出某个集合指定元素个数的所有子集? 思路:对集合中所有元素进行标记,0表示未选中,1表示选中.假如有一个集合有3个元素为 {1,2,3}, 则 000 表示一个都不选, 001表示选中数组中第一个元素1,010表示选中数组中第2个元素2,011表示选中数组中第1,2个元素即是1,2.... 这样一来,集合{1,2,3}的所有子集(忽略空集)可以表示为 001 -> 111 这样的编码.这样,我们就知道集合的所有子集的个数,即是 2^3=8个.所以,如果我们

集合的子集

题目描述 请编写一个方法,返回某集合的所有非空子集. 给定一个int数组A和数组的大小int n,请返回A的所有非空子集.保证A的元素个数小于等于20,且元素互异.各子集内部从大到小排序,子集之间字典逆序排序,见样例. 测试样例: class Permutation { public: vector<string> getPermutation(string A) { vector<string> res; if(A.size() == 0) return res; int cur

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

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

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

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