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

C++ dfs搜索枚举(四十九)【第九篇】

今天我们接着来学习dfs(枚举)

1.枚举排列

在之前的搜索枚举中,我们并没有考虑选入物品的 排列顺序。但在一些题目中,会要求考虑给定数字或物品的排列,这种排列可以是在 
n 个中的所有符合要求的全排列,也可以是在 
n 中找到长度为 k 的排列。

如果使用我们之前的搜索枚举方法,我们发现难以用参数标记原数组中数字的选取情况,那么我们就需要一个全局的布尔数组,帮助我们标记哪些数字已经被选入了排列。另一方面,由于我们使用了这样的全局标记数组,那么必然在搜索时使用到 回溯 技巧,在这个分支的搜索结束后,将标记数组还原。

若要输出 n 个数字全排列,在 dfs 数组中需要的参数需要包含已经选入的数字,在选取当前位数字后进行搜索后,要注意进行回溯

int n;
int per[N];
bool vis[N];
void dfs (int dep) {if (dep == n) {for (int i = 0; i < n; i++) {cout << per[i] << " ";}cout << endl;return;}for (int i = 1; i <= n; i++) {if(vis[i]) {continue;}vis[i] = true;per[dep] = i;dfs(dep + 1);vis[i] = false;
}

如果想要输出 n 个数字的 k 排列,我们可以在之前代码上进行一些较小的修改。当我们选取到 k 个数字时就应该停止继续搜索枚举的过程。

int n;
int per[N];
bool vis[N];
void dfs (int dep) {if (dep == k) {for (int i = 0; i < k; i++) {cout << per[i] << " ";}cout << endl;return;}for (int i = 1; i <= n; i++) {if(vis[i]) {continue;}vis[i] = true;per[dep] = i;dfs(dep + 1);vis[i] = false;}
}

相关文章:

  • Spark安装(Yarn模式)
  • WebAssembly002 FFmpegWasmLocalServer项目
  • 单选全选功能实现
  • k8s弃用docker后使用ctr导入镜像
  • 代码随想录算法训练营29期|day43 任务以及具体任务
  • leetcode-hot100树的专题
  • 验证码倒计时:用户界面的小细节,大智慧
  • 多维时序 | Matlab实现RF-Adaboost随机森林结合Adaboost多变量时间序列预测
  • SSL协议是什么?关于SSL和TLS的常见问题解答
  • Map 集合
  • 编译原理实验1——词法分析(python实现)
  • @ResponseBody
  • 创建TextMeshPro字体文件
  • jvm几个常见面试题整理
  • 三网码支付系统源码,三网免挂有PC软件,有云端源码,附带系统搭建教程
  • 2017 年终总结 —— 在路上
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • conda常用的命令
  • JavaScript 基础知识 - 入门篇(一)
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • jQuery(一)
  • js作用域和this的理解
  • KMP算法及优化
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • select2 取值 遍历 设置默认值
  • spring学习第二天
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 检测对象或数组
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 实现菜单下拉伸展折叠效果demo
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 树莓派 - 使用须知
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 用jquery写贪吃蛇
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • ​LeetCode解法汇总518. 零钱兑换 II
  • "无招胜有招"nbsp;史上最全的互…
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (C++17) optional的使用
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • .NET Framework与.NET Framework SDK有什么不同?
  • .NET Project Open Day(2011.11.13)
  • .Net Web窗口页属性
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)
  • .net(C#)中String.Format如何使用
  • .NET4.0并行计算技术基础(1)
  • .Net中间语言BeforeFieldInit
  • @data注解_一枚 架构师 也不会用的Lombok注解,相见恨晚
  • [.NET 即时通信SignalR] 认识SignalR (一)
  • [1] 平面(Plane)图形的生成算法
  • [30期] 我的学习方法
  • [Ariticle] 厚黑之道 一 小狐狸听故事