题目:B3622 枚举子集(递归实现指数型枚举)
题目描述
今有 n n n 位同学,可以从中选出任意名同学参加合唱。
请输出所有可能的选择方案。
输入格式
仅一行,一个正整数 n n n。
输出格式
若干行,每行表示一个选择方案。
每一种选择方案用一个字符串表示,其中第
i
i
i 位为 Y
则表示第
i
i
i 名同学参加合唱;为 N
则表示不参加。
需要以字典序输出答案。
输入输出样例 #1
输入 #1
3
输出 #1
NNN
NNY
NYN
NYY
YNN
YNY
YYN
YYY
说明/提示
对于 100 % 100\% 100% 的数据,保证 1 ≤ n ≤ 10 1\leq n\leq 10 1≤n≤10。
代码
#include<iostream>
using namespace std;
const int Maxn = 10 + 10;
int n, vis[Maxn];
void dfs(int pos){
if(pos == n){
for(int i = 0; i < n; i ++){
if(vis[i]){
cout << "Y";
}
else{
cout << "N";
}
}
puts("");
return;
}
dfs(pos + 1); // 该位置不参加
vis[pos] = 1;
dfs(pos + 1); // 该位置参加
vis[pos] = 0;
}
int main(){
cin >> n;
dfs(0);
return 0;
}
结果