当前位置: 首页 > news >正文

递归实现指数型枚举

我们以n=2 为例

我们每次都有选和不选两种 方案,对于每个数字

核心代码

tatic void dfs(int u) {  // u代表当前处理的数字
        if (u > n) {                  // 终止条件:处理完所有数字
            for (int i = 1; i <= n; i++) {  // 遍历所有数字
                if (nums[i]) {               // 如果选中则输出
                    System.out.print(i + " ");
                }
            }
            System.out.println();  // 换行
            return;                // 返回上一层递归
        }
        
        // 不选当前数字u
        nums[u] = false;   // 标记不选
        dfs(u + 1);        // 处理下一个数字
        
        // 选当前数字u
        nums[u] = true;    // 标记选中
        dfs(u + 1);        // 处理下一个数字
    }

完整代码



import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.StringTokenizer;

public class Main {

	static boolean st[] ;
	static int a[] ;
	static int n ;
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		n =in.nextInt();
//		初始化
		st =new boolean [n+1];
		a = new int[n+1];
		for(int i=1; i<=n ;i++) {
			a[i]  = i; ;
		}
		dfs(1);
		out.close();
		
	}
	
	static void  dfs(int u ) {
		if(u>n) {
			for(int i=1; i<=n ;i++) {
				if(st[i]) {
					out.print(i+" ");
				}
			}
//			换行
			out.println();
//			回溯
			return;
		}
		st[u]= false;
		dfs(u+1);
		
		st[u]= true;
		dfs(u+1);
	}
	//快读模板
			static FastReader in=new FastReader();
			static PrintWriter out = new PrintWriter(System.out);

		static class FastReader{
			static BufferedReader br;
			static StringTokenizer st;
			
			public FastReader() {
				// TODO Auto-generated constructor stub
				br =new BufferedReader(new InputStreamReader(System.in));

			}
			
			String next() {
				String str ="" ;
				while(st==null||!st.hasMoreElements()) {
					try {
						str = br.readLine();
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					st=new StringTokenizer(str);
				}
				return st.nextToken();
				
			}
			int nextInt() {
				return Integer.parseInt(next());
			}
			
			
		}
}

相关文章:

  • 基于金字塔视觉变换的类引导网络高分辨率遥感图像高效语义分割
  • k8s 1.24.17版本部署(使用Flannel插件)
  • 数字人技术的核心:AI与动作捕捉的双引擎驱动(2/10)
  • C,C++,C#
  • 论文_基于联邦增量学习的SND环境下DDos攻击检测模型
  • Qt项目——记事本
  • 演员郑歌语正式加入创星演员出道计划,开启演艺新蓝图
  • DFS 蓝桥杯
  • 【C++算法】52.链表_两两交换链表中的节点
  • 分布式防护节点秒级切换:实战配置与自动化运维
  • FTP协议和win server2022安装ftp
  • HarmonyOS-ArkUI Ability进阶系列-各类生命周期总结
  • 网络安全应急响应-日志分析
  • 核心机制与主流协议解析
  • vim定位有问题的脚本/插件的一般方法
  • 蓝桥杯基础算法-递归
  • Efficient Burst Raw Denoising:稳定噪声方差和分频率降噪
  • EMA注意力机制
  • 数字游戏(继Day 10)
  • FreeRTOS临界区
  • 特朗普访问卡塔尔,两国签署多项合作协议
  • 昆明警方重拳打击经济领域违法犯罪:去年抓获905名嫌犯
  • 山东市监局回应“盒马一批次‘无抗’鸡蛋抽检不合格后复检合格”:系生产商自行送检
  • 西安市未央区委书记刘国荣已任西咸新区党工委书记
  • 人才争夺战,二三线城市和一线城市拼什么?洛阳官方调研剖析
  • 习近平出席中国-拉美和加勒比国家共同体论坛第四届部长级会议开幕式