当前位置: 首页 > 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());
			}
			
			
		}
}

http://www.dtcms.com/a/118672.html

相关文章:

  • 基于金字塔视觉变换的类引导网络高分辨率遥感图像高效语义分割
  • 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临界区
  • mybatis是如何进行分页的?分页插件的原理是什么
  • 【学习笔记】HTTP和HTTPS的核心区别及工作原理
  • w283图书商城管理系统
  • Docker全方位指南
  • 嵌入式---加速度计
  • 原子化 CSS 的常见实现框架
  • 微软 SC-900 认证-考核Azure 和 Microsoft 365中的安全、合规和身份管理(SCI)概念
  • 从光波调制到温度补偿:Lilikoi光纤力传感器的核心技术拆解
  • 麦科信光隔离探头在碳化硅(SiC)MOSFET动态测试中的应用
  • Glowroot 是一个开源的 Java 应用性能监控(APM)工具,专为 低开销、易用性 设计,具体的应用及优势进行分析说明