题目描述
给定
n
n
n 个元素,输出
n
n
n 个元素构成的集合的所有子集。
简化:以 n n n 个连续的 0/1 代表第 i i i 个元素是否选中(0:未选中,1:选中)。
输入格式
一行,一个正整数
n
n
n(n<20)。
输出格式
2n 行,每行一个 0/1 构成的字符串,表示子集。
按字典序输出。
样例输入
4
样例输出
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
集合:
最简单的说法就是在朴素集合论 (最原始的集合论) 中定义,即集合是 “确定的一堆东西” ,集合里面的 “东西” 则称为 元素
0000 //空集
0001 //{4}
0010 //{3}
0011 //{3,4}
0100 //{2}
0101 //{2,4}
0110 //{2,3}
0111 //{2,3,4}
1000 //{1}
1001 //{1,4}
1010 //{1 3}
1011 //{1,3,4}
1100 //{1,2}
1101 //{1,2,4}
1110 //{1,2,3}
1111 //{1,2,3,4}
#include <bits/stdc++.h>
using namespace std;
int n;
int visit[101];
void dfs(int cur)
{
int i;
if(cur==n+1)
{
for(i=1;i<=n;i++)
{
cout<<visit[i];
}
cout<<endl;
return ; //回溯
}
for(i=0;i<=1;i++) //for循环枚举
{
visit[cur]=i;
dfs(cur+1);
}
}
int main()
{
cin>>n;
dfs(1);
return 0;
}