排列数字(DFS深度优先搜索)

给定一个整数 n,将数字 1∼n 排成一排,将会有很多种排列方法。

现在,请你按照字典序将所有的排列方法输出。

输入格式

共一行,包含一个整数 n。

输出格式

按字典序输出所有排列方案,每个方案占一行。

数据范围

1≤n≤7

输入样例:
3
输出样例:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

思路:

DFS算法每次都往深搜,到达叶子结点后回溯

这道题使用DFS即可做出,因为结合了递归不好理解,先将递归解释:递归就是函数调用自身,遇到终止条件后返回。

借用这篇文章的程序:[AcWing]842. 排列数字(C++实现)dfs模板题,递归思想的解释_Cloudeeeee的博客-CSDN博客 

#include<iostream>
using namespace std;int n;void func(int u){if(u == 0) return;cout << "Recursive program goes to the next level --- " << u << endl;func(u-1);cout << "Recursive program backtracking --- " << u <<endl;return;
}
int main(){cin >> n;func(n);return 0;
}

得到结果:

我们可以得到这样的流程 :

由此我们就理解了递归的流程,下面是DFS对这道题的解法:一个位置一个位置的填入数字,如果没有空位置了就让最后一个填的数字可用并返回

 示例代码:

#include<iostream>
using namespace std;
const int N=10;
int path[N]; //记录位置信息
bool st[N]; //保存这个位置用过了没有,用过就设为true,默认初始为false
int n;
void dfs(int u) //u表示当前填的位置
{if( u == n ) //所有位置都填满了(u现在变成了最后一个位置的下一位),此时输出{for(int i=0;i<n;i++) cout<<path[i]<<" ";cout<<endl;return;}for(int i=1;i<=n;i++)    //枚举当前位置还可以填哪些数{if(!st[i]) //如果这个数字还能用{path[u] = i; //把数字填到当前位置上,i表示从1到n的数字st[i] = true; //记录当前数字已经被使用dfs(u+1); //填下一个位置st[i] = false; //回溯的时候要恢复,这个数字现在可以用} //注意:回溯不仅是return,还有for循环}}
int main()
{cin>>n;dfs(0); //从第0个位置开始看return 0;
}

注意:这个程序里面回溯不仅仅是递归终止的return,还有for循环,比如运行到st[i] = false;的时候整个if语句就结束了,但是可能上面的for循环还没有结束,要再次进行循环操作

    for(int i=1;i<=n;i++)    //枚举当前位置还可以填哪些数{if(!st[i]) //如果这个数字还能用{path[u] = i; //把数字填到当前位置上,i表示从1到n的数字st[i] = true; //记录当前数字已经被使用dfs(u+1); //填下一个位置st[i] = false; //回溯的时候要恢复,这个数字现在可以用} //注意:回溯不仅是return,还有for循环}

这道题光看代码可能不太好理解,所以我把程序运行的流程图画了出来,例如输入3的时候 ,下面的三张图分别代表着dfs(0)情况下,i=1,i=2,i=3的运行流程

 

大家不理解的话也可以在纸上自己写一遍 

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

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

相关文章

4.Spring IoC 的实现机制是什么?

Spring IoC 的实现机制是什么? Spring 中的 IoC 的实现原理就是工厂模式加反射机制。 代码示例如下: interface fruit{public abstract void eat(); } class Apple implements fruit{public void eat()

非上市公司的财务报表可以找到吗?

企业财务报表 财务报表是反映企业或预算单位一定时期资金、利润状况的会计报表。我国财务报表的种类、格式、编报要求&#xff0c;均由统一的会计制度作出规定&#xff0c;要求企业定期编报。国营工业企业在报告期末应分别编报资金平衡表、专用基金及专用拨款表&#xff0c;基…

LeetCode | 19. 删除链表的倒数第 N 个结点

LeetCode | 19. 删除链表的倒数第 N 个结点 OJ链接 思路&#xff1a; 定义虚拟头节点dummy并初始化使其指向head然后定义快慢指针让快指针先走n步然后一起走最后删除倒数第n个节点然后释放虚拟节点dummy struct ListNode* removeNthFromEnd(struct ListNode* head, int n) {…

洛谷 P4568 [JLOI2011] 飞行路线 pytho解析

P4568 [JLOI2011] 飞行路线 pytho解析 时间&#xff1a;2023.11.20 题目地址&#xff1a;[JLOI2011] 飞行路线 题目分析 对于这个题呢就是最短路的问题了。那就可以用Dijkstra 算法&#xff0c;唯一不同的地方就是有免费的机票次数&#xff0c;那我们就先不考虑这个&#xf…

【C++】标准模板库 STL 简介

&#x1f9d1;‍&#x1f393;个人主页&#xff1a;简 料 &#x1f3c6;所属专栏&#xff1a;C &#x1f3c6;个人社区&#xff1a;越努力越幸运社区 &#x1f3c6;简 介&#xff1a;简料简料&#xff0c;简单有料~在校大学生一枚&#xff0c;专注C/C/GO的干货分…

B站短视频如何去水印?一键解析下载B站视频!

在浏览B站视频时&#xff0c;我们有时会遇到带有水印的场景。这些水印可能会干扰我们对视频内容的观看体验&#xff0c;特别是在全屏观看时。此外&#xff0c;当我们想要保存或分享这些视频时&#xff0c;水印也会成为一种障碍。因此&#xff0c;去除水印的需求就变得非常迫切。…

fio测试磁盘速度

注意 测试 读速度 不加 --readonly fio 会 先写 文件 再 读取 直接 --readonly 参数 防止 fio 写入 文件 time fio -filename./test1 -direct1 -iodepth 1 -thread -rwrandwrite -ioenginepsync -bs1m -size1G -numjobs1 -runtime1000 -group_reporting -namemytesttime fio…

PXE高效批量网络装机

什么是PXE PXE是由Intel公司开发的最新技术&#xff0c;全称为“Preboot Execution Environment”&#xff08;预启动执行环境&#xff09;&#xff0c;工作于Client/Server的网络模式。它允许工作站通过网络从远端服务器下载映像&#xff0c;并由此支持通过网络启动操作系统。…

机器学习赋予用户“超人”的能力来打开和控制虚拟现实中的工具

原创 | 文 BFT机器人 最近&#xff0c;剑桥的研究人员开发了一种虚拟现实应用程序&#xff0c;只需用户手部的移动即可打开和控制一系列3D建模工具。 来自剑桥大学的研究人员利用机器学习开发了“HotGestures”类似于许多桌面应用程序中使用的热键&#xff08;快捷键&#xff…

fastdfs-client-java-1.30 maven 打包安装

1. 进入源代码目录&#xff0c;打开cmd mvn clean install 或者 mvn package 问题不大的话会在同级目录target目录下生成打包后文件 2. 当前目录下cmd进行maven安装 mvn install:install-file -DgroupIdorg.csource -DartifactIdfastdfs-client-java -Dversion${version} -D…

AX6000路由器更改算号器密码为自定义密码的方法

首先,你开启了此路由的SSH服务后,就可以用算号器密码SSH登录到路由器中了, 但如果你想改root的密码为自己自定义的密码时, 发现密码总是在路由器重启后,就失效了【即:又恢复为算号器的密码了】。 具体的开启SSH的方法,请参考本博客的相关文章,链接如下: 小米AX600…

Polygon zkEVM的Dragon Fruit和Inca Berry升级

1. Polygon zkEVM的Dragon Fruit升级 2023年8月31日&#xff0c;Polygon zkEVM团队宣称启动了其Mainnet Beta的Dragon Fruit升级的10天timelock&#xff0c;预计将于2023年9月11日激活。 Dragon Fruit升级点有&#xff1a; 改进了网络支持了最新的以太坊opcode——PUSH0 1.…

HTTP(Hypertext Transfer Protocol)协议

文章目录&#xff1a; 什么是HTTP&#xff1f;认识URLurlencode 和 urldecodeHTTP 协议请求和响应格式HTTP 请求&#xff08;Request&#xff09;HTTP 响应&#xff08;Response&#xff09; HTTP 请求方法HTTP 的状态码常见的Header 什么是HTTP&#xff1f; HTTP&#xff08;…

用向量数据库Milvus Cloud搭建GPT大模型+私有知识库的定制AI助手——PPT大纲助手

随着人工智能技术的不断发展,AI助手在各行各业中扮演着越来越重要的角色。在商业领域,PPT演示是一种常见的沟通方式,而定制化的PPT大纲助手能够极大地提高PPT制作效率和质量。本文将介绍如何利用向量数据库Milvus Cloud搭建GPT大模型和私有知识库,构建一款高效的PPT大纲助手…

产品智能化成照明企业“必选题” 小匠物联交出标准答卷

7月20日&#xff0c;由佛山市科学技术局、佛山市工业和信息化局、佛山市科学技术协会指导&#xff0c;佛山市照明灯具协会主办的“2023佛山市智能照明&驱动新技术研讨会”在佛山市国家火炬创新创业园宜尚PLUS酒店隆重举行。此次会议邀请近100位知名企业产品经理和研发工程师…

金蝶云星空ScpSupRegHandler任意文件上传漏洞复现 [附POC]

文章目录 金蝶云星空ScpSupRegHandler任意文件上传漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 金蝶云星空ScpSupRegHandler任意文件上传漏洞复现 [附POC] 0x01 前言 免责声明&#xff1a;请…

2.发送邮件+开发注册功能

目录 1.发送邮件 1.1 邮箱设置:启用客户端 SMTP 服务 1.2 S

21、ila

1、bd文件中添加debug信号&#xff0c;右击信号线&#xff0c;debug。

3 个常识点必须先了解!0基础入门Python!

学习一门新的语言之前&#xff0c;首先简单了解下这门语言的背景。Python 是一种面向对象的解释型计算机程序设计语言&#xff0c;由荷兰人 Guido van Rossum 于 1989 年发明&#xff0c;第一个公开发行版发行于 1991 年。 Python 在设计上坚持了清晰划一的风格&#xff0c;这…

mongodb 日志详情

1 mongodb日志简介 MongoDB的日志包括两个主要部分&#xff1a;操作日志&#xff08;oplog&#xff09;和系统日志。 1.1 操作日志 操作日志&#xff08;oplog&#xff09;是一个特殊的集合&#xff0c;用于记录所有对数据库进行的操作&#xff08;如插入、更新和删除&#x…