现在的位置: 首页 > 综合 > 正文

7.3.2(子集生成1)

2013年08月28日 ⁄ 综合 ⁄ 共 539字 ⁄ 字号 评论关闭

学到了那个用标记的方法生成所有的子集,

主要的方法就是把所有的元素都先标记上,然后再一个一个的标记,

反标记,然后再把元素一起输出来,方法比较好.

也比较容易上手,就是一个递归的小程序;

主要的是那个对应映射的关系;

代码:

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <string>

using namespace std;

int n;

int A[1111];

int B[1111];

void Print_subset(int cur)
{
	if (cur == n)
	{
		for (int i = 0; i < cur; i++)
		{
			if (B[i])
			{
				cout << A[i];
			}
		}
		cout << endl;
		return ;
	}
	B[cur] = 1;
	Print_subset(cur + 1);
	B[cur] = 0;
	Print_subset(cur + 1);
}

void Init()
{
	for (int i = 0; i < n; i++)
	{
		B[i] = i; // 对应映射关系 
		scanf("%d", &A[i]); //在这里! 呼呼 
	}
}

int main()
{
	while (scanf("%d", &n) != EOF)
	{
		Init();
		Print_subset(0);
	}
	system("pause");
	return 0;
}

抱歉!评论已关闭.