AcWing 92. 递归实现指数型枚举
原题链接
简单
import java.util.Scanner;
public class Main {
private static final int N = 15; // 最大集合大小
private static int n; // 实际输入的集合大小
private static int[] st = new int[N]; // 状态数组
// 深度优先搜索函数,用于生成所有子集
private static void dfs(int index) {
// 当处理到集合末尾时,输出当前子集
if (index == n) {
for (int i = 0; i < n; i++) {
if (st[i] == 1) // 如果元素被选择
System.out.print((i + 1) + " "); // 输出元素(索引从1开始)
}
System.out.println(); // 换行,输出完一个子集
return;
}
// 不选择当前元素
st[index] = 2;
dfs(index + 1);
st[index] = 0; // 恢复现场,重置状态
// 选择当前元素
st[index] = 1;
dfs(index + 1);
st[index] = 0; // 恢复现场,重置状态
}
// 主函数
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
n = scanner.nextInt(); // 输入实际的集合大小
dfs(0); // 从索引0开始生成子集
scanner.close();
}
}