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

全排列问题cpp

题目如下

 dfs做法

 全局变量

used:一个布尔类型的vector,用于标记数字是否已经在当前排列中使用过。used[i]为true表示数字i已经被使用,为false表示未被使用。

permutation:一个整数类型的vector,用于存储当前正在生成的全排列。

dfs函数:

递归终止条件:当permutation的大小等于n时,说明已经生成了一个完整的全排列,此时遍历permutation并按照每个数字保留5个场宽的格式输出该排列,然后返回。

递归过程:遍历从1到n的数字,如果某个数字i未被使用(即used[i]为false),则将其标记为已使用(used[i] = true),加入到当前排列中(permutation.push_back(i)),然后递归调用dfs继续生成下一个数字。递归返回后,进行回溯操作,将刚才加入的数字从排列中移除(permutation.pop_back()),并将其标记为未使用(used[i] = false),以便在后续的循环中可以再次使用该数字。

main函数:

读取输入的整数n。

初始化used数组,将所有元素设置为false,表示所有数字都未被使用。

调用dfs函数开始生成全排列。

 

库函数方法(next_permutation)更为方便

 解释

next_permutation函数:
它是 C++ 标准库<algorithm>头文件中的一个函数,用于生成给定序列的下一个字典序排列。
函数接受两个迭代器参数,nums.begin() 和 nums.end(),这两个迭代器指定了要进行全排列操作的序列范围,即[nums.begin(), nums.end())(左闭右开区间)。
该函数的工作原理是:首先从序列的末尾向前查找,找到第一个满足*(i - 1) < *i 的位置i - 1;然后再从序列末尾向前查找,找到第一个大于*(i - 1) 的元素*j;接着交换*(i - 1) 和*j;最后将位置i 及其之后的元素进行反转,从而得到下一个字典序排列。
next_permutation函数的返回值是一个布尔值:如果存在下一个排列(即成功生成了下一个字典序排列),则返回true;如果当前排列已经是字典序最大的排列(不存在下一个排列),则返回false。
while循环:
while循环的条件是next_permutation(nums.begin(), nums.end()),即只要next_permutation函数返回true(表示成功生成了下一个排列),就会继续执行循环体中的代码。
在循环体中,通常会对生成的新排列进行一些处理,比如输出排列中的元素。在前面生成全排列的代码示例中,循环体内部的代码用于遍历并输出当前排列中的每个数字,每个数字保留 5 个场宽。
当next_permutation函数返回false时,说明已经遍历完了所有可能的排列(当前排列是字典序最大的排列),此时while循环结束。
综上所述,while (next_permutation(nums.begin(), nums.end())) 这行代码的作用是不断调用next_permutation函数生成序列nums 的下一个字典序排列,并在每次成功生成新排列后执行循环体中的代码,直到遍历完所有可能的排列为止。

相关文章:

  • OOA-CNN-LSTM-Attention、CNN-LSTM-Attention、OOA-CNN-LSTM、CNN-LSTM四模型多变量时序预测一键对比
  • 代码随想录算法训练营Day32
  • css3新特性第五章(web字体)
  • 推荐系统/业务,相关知识/概念2
  • Vue 3 Proxy 响应式工作原理
  • Python常用的第三方模块之二【openpyxl库】读写Excel文件
  • Python爬虫实战:获取海口最近2周天气数据,为出行做参考
  • [FPGA基础] FIFO篇
  • SAP ERP HCM HR Forms Workplace
  • 海量数据存储策略
  • 程序的编译(预处理操作)+链接
  • Ray Tracing(光线追踪)与 Ray Casting(光线投射)
  • 强化学习(Reinforcement Learning, RL)​​与​​深度强化学习(Deep Reinforcement Learning, DRL)​​
  • 浅谈AI致幻
  • 如何避免流程形式化导致的效率低下?
  • 【CPU】结合RISC-V CPU架构回答中断系统的7个问题(个人草稿)
  • 【C++类和数据抽象】类的作用域
  • 深度学习-全连接神经网络
  • Kubernetes相关的名词解释Containerd(14)
  • YOLO11改进 | 特征融合Neck篇之Lowlevel Feature Alignment机制:多尺度检测的革新性突破
  • 西安一男子在闲鱼卖手机卷入电诈案,不愿前往异地接受调查被列网逃
  • 商务部:中国加快推进服务业扩大开放综合试点为世界注入更多确定性
  • “雷公”起诉人贩子王浩文案将开庭:索赔6元,“讨个公道”
  • 分离19年后:陈杨梅首度露面,父亲亲手喂棉花糖给女儿吃
  • 延安市委副书记马月逢已任榆林市委副书记、市政府党组书记
  • 全国登记在册民营企业超过5700万户