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