学到了那个用标记的方法生成所有的子集,
主要的方法就是把所有的元素都先标记上,然后再一个一个的标记,
反标记,然后再把元素一起输出来,方法比较好.
也比较容易上手,就是一个递归的小程序;
主要的是那个对应映射的关系;
代码:
#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;
}