递归实现全排列

思路:

        

  1. 对于给定的集合,选择一个元素作为当前位置的元素。
  2. 将当前位置的元素与集合中其他位置的元素交换,依次产生新的排列。
  3. 通过递归调用,将当前位置向后移动,继续生成新的排列。
  4. 当当前位置达到集合的末尾时,表示生成了一个完整的排列,将其保存下来。

示例:

        1        2        3

1

        1        3        2

        2        1        3

2

        2        3        1

        3        1        2

3

        3        2        1

树状图:

代码:

#include <iostream>using namespace std;// 深度优先搜索函数,用于生成排列
void dfs(int a[], int n, int i) {// 当 i 等于 n 时,说明已经排列完毕,输出当前排列if (i == n) {for (int i = 0; i < n; i++)cout << a[i];cout << endl;return;}// 对于第 i 位,可以选择 a[i] 到 a[n-1] 中任意一个数进行交换for (int j = i; j < n; j++) {// 交换 a[i] 和 a[j]swap(a[i], a[j]);// 对于下一位递归,i 值加 1,继续排列下一个数dfs(a, n, i + 1);// 恢复数组 a,进行下一轮交换swap(a[i], a[j]);}
}int main() {int a[] = {1, 2, 3};dfs(a, 3, 0); // 从第 0 位开始排列return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/227530.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Charles下载安装及配置之Mac

因工作需要用到抓包工具&#xff0c;但Fiddler不能在mac上使用&#xff0c;所以找到了Charles&#xff0c;Charles其实是一款代理服务器&#xff0c;通过过将自己设置成系统&#xff08;电脑或者浏览器&#xff09;的网络访问代理服务器&#xff0c;然后截取请求和请求结果达到…

Leetcode—28.找出字符串中第一个匹配项的下标【简单】

2023每日刷题&#xff08;四十&#xff09; Leetcode—28.找出字符串中第一个匹配项的下标 实现代码 int strStr(char* haystack, char* needle) {int len1 strlen(haystack);int len2 strlen(needle);int idx -1;int i 0;while(i < len1 - len2) {if(strncmp(haystac…

蓝桥杯物联网竞赛_STM32L071_5_串口接收发送数据

理论&#xff1a; 串口采取异步通信&#xff0c;即不依赖时钟节拍来接收或发送数据&#xff0c;而是采用互相约定的波特率传输数据。 波特率与单位时间传输的比特数有关&#xff0c;波特率越大传输的数据越多 传输一个比特花费的时间T 1 / 比特率 接受和发送数据的时候需要…

JS+ES6新增字符串操作方法大汇总,共四十七种方法

让我为大家介绍一下字符串的操作方法吧&#xff0c;你知道与不知道的大部分都在这&#xff01; 分类可能有点不太对&#xff0c;还请大家见谅&#xff01; 增 1.concat() 拼接字符串 可以连接两个或多个字符串 let str "hello"let str1 " str"console…

VS2010配置opencv2.4.10

1.下载opencv2.4.10&#xff0c;百度网盘链接如下&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1UdoQJbRUEB_G2urT703xYQ 提取码&#xff1a;7lbd 2.运行opencv-2.4.10.exe&#xff0c;将文件提取到一个自定义目录里&#xff1a; 3.添加系统环境变量 在“系统变量…

知识变现的未来:解析知识付费系统的核心

随着数字时代的发展&#xff0c;知识付费系统作为一种新兴的学习和知识分享模式&#xff0c;正逐渐引领着知识变现的未来。本文将深入解析知识付费系统的核心技术&#xff0c;揭示其在知识经济时代的重要性和潜力。 1. 知识付费系统的基本架构 知识付费系统的核心在于其灵活…

代码随想录算法训练营 ---第四十九天

前言&#xff1a; 今天是买卖股票的最佳时机系列&#xff0c;本系列之前在学习贪心思想时做过一些。 第一题&#xff1a; 简介&#xff1a; 本题在读题时我们要注意到几个细节 1.本题股票买卖只有一次。2.我们要在最低点买股票&#xff0c;在最高点卖股票。 我的思路&#…

基于SSM抗疫爱心小栈APP-计算机毕设 附源码 54553

SSM抗疫爱心小栈APP 目 录 摘要 1 绪论 1.1 背景及意义 1.2研究现状 1.3ssm框架 1.4论文结构与章节安排 2 2 抗疫爱心小栈APP系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据增加流程 2.2.2 数据修改流程 2.2.3数据删除流程 2.3 系统功能分析 2.3.1功能性分…

第八节HarmonyOS @Component自定义组件的生命周期

在开始之前&#xff0c;我们先明确自定义组件和页面的关系&#xff1a; 1、自定义组件&#xff1a;Component装饰的UI单元&#xff0c;可以组合多个系统组件实现UI的复用。 2、页面&#xff1a;即应用的UI页面。可以由一个或者多个自定义组件组成&#xff0c;Entry装饰的自定…

bodymovin:AE动画导出为JSONforMac/win中文版下载

对于动画制作爱好者和专业设计师来说&#xff0c;Adobe After Effects&#xff08;AE&#xff09;是一个强大的工具&#xff0c;可以创造出惊人的动画效果。然而&#xff0c;将这些动画导出为可交互的格式一直是一个挑战。现在&#xff0c;有了bodymovin&#xff0c;你可以轻松…

在Python中可视化CSV文件中的数据

CSV代表“逗号分隔值”。这意味着CSV文件中的数据&#xff08;值&#xff09;由分隔符分隔&#xff0c;即&#xff0c;逗号CSV文件中的数据以扩展名为. csv的表格格式存储。通常&#xff0c;CSV文件与Microsoft Excel工作表一起使用。CSV文件包含许多记录&#xff0c;数据分布在…

什么是虚拟化?如何监控虚拟化设备

虚拟化是创建物理 IT 资源&#xff08;如服务器或桌面&#xff09;的虚拟版本的行为&#xff0c;虚拟机&#xff08;VM&#xff09;是在物理主机设备上创建的&#xff0c;VM 的行为与物理设备完全相同&#xff0c;并且可以从主机运行不同的操作系统。 例如&#xff0c;您可以在…