回溯法:(1)生成 0 和 1 的全排列
回溯法Backtracking是算法设计中一种非常重要的思想核心是 “试探 - 回退”在解决问题时逐步构建解的路径当发现当前路径无法得到有效解时就回退到上一步尝试其他可能的选择。本文将通过一个经典案例 —— 生成 0 和 1 的全排列带你理解回溯法的底层逻辑和实现方式。一、核心思路要生成 n 位 0 和 1 的全排列本质是为每一个位置依次选择 0 或 1直到填满所有位置然后输出结果若当前位置的选择已穷尽超过 1则回退到上一个位置尝试下一个可能的取值。我们可以把这个过程想象成 “走迷宫”从第 1 个位置开始先尝试取值 0若当前位置没到最后一位就走到下一个位置重新从 0 开始尝试若当前位置已到最后一位说明找到一个完整排列直接输出若当前位置的取值超过 1即 0 和 1 都试过了就 “回退” 到上一个位置让上一个位置尝试下一个值。二、完整代码实现#include stdio.h #include stdbool.h /** * 打印生成的0和1排列 * X 存储排列的数组下标从1开始 * n 排列的长度 */ void Print(const int* X, int n) { // 遍历数组从1到n输出每个元素 for (int i 1; i n; i) { printf(%3d, X[i]); } printf(\n---\n); } /** * 生成n位0和1的全排列核心回溯逻辑 * X 存储排列的数组下标从1开始 * n 排列的长度 */ void Print01(int* X, int n) { int k 1; // k表示当前处理的位置从第1位开始 X[k] -1; // 初始化当前位置的值为-1便于后续1后从0开始尝试 // 只要当前位置k0未回退到初始状态就继续循环 while (k 0) { X[k] 1; // 尝试下一个值0→1→2... // 若当前值≤10或1是合法取值 if (X[k] 1) { // 若当前位置是最后一位已生成完整排列 if (k n) { Print(X, n); // 打印该排列 } // 若未到最后一位处理下一个位置 else { k; // 移动到下一个位置 X[k] -1; // 初始化下一个位置的值为-1 } } // 若当前值10和1都试过了无合法取值 else { k--; // 回退到上一个位置尝试上一个位置的下一个值 } } } // 主函数测试代码 int main() { int n 3; // 生成3位的0和1全排列可修改n的值 int X[100]; // 定义数组存储排列长度足够大适配不同n printf(生成%d位0和1的全排列\n, n); Print01(X, n); return 0; }三、代码核心解析核心循环逻辑Print01 函数代码片段 作用说明 X[k] -1 初始化当前位置值为 - 1后续X[k]1后从 0 开始尝试保证第一个取值是 0 X[k] 1 每次循环都让当前位置的值 1尝试下一个可能的取值 X[k] 1 限定合法取值为 0 和 1若超出则触发回退 k n 判断是否生成完整排列若是则打印否则处理下一个位置 k-- 回退核心操作当前位置无合法取值时回到上一个位置重新尝试运行结果以 n3 为例生成3位0和1的全排列 0 0 0 --- 0 0 1 --- 0 1 0 --- 0 1 1 --- 1 0 0 --- 1 0 1 --- 1 1 0 --- 1 1 1 ---回溯法的核心特征试探性为每个位置依次尝试合法取值0→1逐步构建解回退性当当前位置无合法取值时回退到上一个位置放弃当前路径尝试其他可能。

相关新闻

【Openclaw】初始配置

【Openclaw】初始配置

1、用的是智谱的Coding Plan https://docs.bigmodel.cn/cn/guide/develop/openclaw#%E5%AE%89%E8%A3%85%E5%92%8C%E9%85%8D%E7%BD%AE-openclaw 2、放开权限 OpenClaw 2026.3.2 版本权限隔离导致工具失效,修复方法:https://www.reddit.com/r/openclaw/com…

2026/7/5 14:17:40 阅读更多 →
基于Elman神经网络的自变量多列输入与单列因变量输出拟合预测模型

基于Elman神经网络的自变量多列输入与单列因变量输出拟合预测模型

基于Elman做多列自变量输入,单列因变量输出做拟合预测模型。 程序内有详细注释,直接替换数据就可以用 程序是matlab语言。Elman神经网络这玩意儿在时序预测里真是老熟人了,最近帮朋友处理工业传感器数据时重新捡起来用。这次遇到个有意思的需…

2026/7/3 19:16:51 阅读更多 →
B3850 [GESP202306 四级] 幸运数

B3850 [GESP202306 四级] 幸运数

题目来源 https://www.luogu.com.cn/problem/B3850 题目背景 对应的选择、判断题:https://ti.luogu.com.cn/problemset/1126 题目描述 小明发明了一种 “幸运数”。一个正整数,其偶数位不变(个位为第 1 位,十位为第 2 位&…

2026/5/17 9:27:30 阅读更多 →

最新新闻

PIC18F4680与DC-DC降压转换器的数字电源管理方案

PIC18F4680与DC-DC降压转换器的数字电源管理方案

1. 项目背景与核心需求解析在嵌入式系统开发中,电源管理一直是硬件设计的核心挑战之一。当我们使用PIC18F4680这类微控制器构建系统时,往往需要为不同模块提供多种电压等级的稳定电源。传统的线性稳压器虽然简单,但在大电流或输入输出电压差较…

2026/7/5 14:18:19 阅读更多 →
土木工程人必备的计算工具箱,免费无广告,大幅提升工作效率

土木工程人必备的计算工具箱,免费无广告,大幅提升工作效率

前段时间有个做土木工程的兄弟跟我吐槽,说他们做施工方案的时候,要计算各种参数,以前都是手工算或者用Excel,费时费力还容易出错。后来他们公司买了个专业软件,要好几万,而且很多功能用不上,感觉…

2026/7/5 14:18:19 阅读更多 →
2026最新AI Agent从零落地实战指南!小白程序员专属企业级开发教程

2026最新AI Agent从零落地实战指南!小白程序员专属企业级开发教程

本文全方位拆解2026年从零开发企业级AI Agent的完整流程、核心技巧与落地避坑经验,摒弃纯理论空谈,聚焦业务落地与工程实战。区别于传统技术科普,全文主打新手友好、实战为王,覆盖Agent产品定位、通用能力局限、交互设计、任务工程…

2026/7/5 14:16:18 阅读更多 →
常见排序算法详解

常见排序算法详解

一、插入排序插入排序的核心思想是把一个数据插入已经排好序的一组数据中的正确位置。当运用插入排序来排序一组数据时,先把第一个数看作有序,把第二个数插入正确位置;再把前两个数看作有序,把第三个数插入正确位置,以…

2026/7/5 14:12:18 阅读更多 →
网络安全人才缺口327万!应急响应工程师薪资涨幅领跑IT行业,你上车了吗

网络安全人才缺口327万!应急响应工程师薪资涨幅领跑IT行业,你上车了吗

327万缺口,安全行业的人才荒2026年,中国网络安全行业面临着一个令人既兴奋又焦虑的数字:327万。这是教育部、工业和信息化部联合发布的《网络安全人才发展报告》中披露的最新人才缺口数字。与此同时,全国高校每年网络安全相关专业…

2026/7/5 14:12:18 阅读更多 →
【信息科学与工程学】【制造工程】第八十二篇 半导体芯片集成电路集成制造01

【信息科学与工程学】【制造工程】第八十二篇 半导体芯片集成电路集成制造01

半导体芯片集成制造 编号 类型 领域 子领域 / 内容 问题 步骤拆解 参数列表及参数的数值范围及数值分析及常量/常数 1 物理制造 光刻 Lithography 光学成像 + OPC 掩模图案经投影物镜后在光刻胶上形成畸变,如何预补偿? 电磁(亥姆霍兹/波动光学)+ 傅里叶光学 +…

2026/7/5 14:12:18 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻