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

【AcWing】蓝桥杯备赛-深度优先搜索-dfs(2)

目录

写在前面:

题目:94. 递归实现排列型枚举 - AcWing题库

读题:

输入格式:

输出格式:

数据范围:

输入样例:

输出样例:

解题思路:

代码:

AC !!!!!!!!!!

写在最后:


写在前面:

距离蓝桥杯已经不足一个月了,

根据江湖上的传言,

蓝桥杯最喜欢考的是深度优先搜索和动态规划,

所以蓝桥杯也叫暴搜杯、dp杯,

那我备赛当然也就从深度优先搜索,也就是所谓的dfs开始。

题目:94. 递归实现排列型枚举 - AcWing题库

读题:

输入格式:

一个整数 n。

输出格式:

按照从小到大的顺序输出所有方案,每行 1 个。

首先,同一行相邻两个数用一个空格隔开。

其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面。

数据范围:

1 ≤ n ≤ 9

输入样例:

3

输出样例:

1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

解题思路:

这道题是深度优先搜索的经典题目,

我们使用深度优先搜索的时候,

第一个要注意的点是,我们要保证,

我们写出的递归结构能够遍历所有情况,

在我们初学搜索的时候,我们一定要画一个递归搜索树观察,

递归非常抽象,画图能很好的帮助我们解题。(以上递归搜索的基本思路,多熟悉总是好的)

接下来是具体思路:

根据题目说的从小到大输出每个方案,

字典序小的数放在前面,

我们画一个递归搜索树观察:

根节点:(以n=3为例)

 向下搜索:

从小到大:

 继续搜索,

使用过得数不再使用:

继续搜索:

 我们需要输出的就是最下面这一排。 

下面是代码实现:

代码:

//养成好习惯,把常用头文件包了
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

//数组大小比题目要求大就行,这题n <= 9
const int N = 10;

int n;

int st[N];

//创建一个数组用来判断位置是否已经有数据了
bool used[N];

void dfs(int u)
{
    //已经递归搜索到底了
    if(u == n)
    {
        //打印数组中存放的值
        for(int i = 0; i < n; i++)
        {
            printf("%d ", st[i]);
        }
        puts("");
        return;
    }
    else
    {
        for(int i = 0; i < n; i++)
        {
            //如果used[i]等于true,证明该位置已经被占用,直接让i++继续循环
            if(!used[i])
            {
                //表示该位置已经占用
                used[i] = true;
                
                //将要打印的值存进数组
                st[u] = i + 1;
                
                //递归往下搜索
                dfs(u + 1);
                
                //位置恢复原样(没有被占用了)
                used[i] = false;
            }
        }
    }
}

int main()
{
    scanf("%d", &n);
    dfs(0);
    return 0;
}

AC !!!!!!!!!!

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果喜欢本文的话,欢迎点赞和评论,写下你的见解。

如果想和我一起学习编程,不妨点个关注,我们一起学习,一同成长。

之后我还会输出更多高质量内容,欢迎收看。


http://www.kler.cn/a/165.html

相关文章:

  • 【HarmonyOS NEXT】鸿蒙应用实现屏幕录制详解和源码
  • 00000008_C并发编程与多线程
  • JS进阶--JS听到了不灭的回响
  • 【博主推荐】 Microi吾码开源低代码平台,快速建站,提高开发效率
  • Vscode辅助编码AI神器continue插件
  • MacBook Linux 树莓派raspberrypi安装Golang环境
  • 【Java版oj】day08两种排序方法、最小公倍数
  • 11.落地:微服务架构灰度发布方案
  • Android 架构之长连接技术
  • 写给20、21级学生的话
  • chatgpt这么火?前端如何实现类似chatgpt的对话页面
  • CANoe-Start Values窗口是做什么的
  • JavaScript的事件传播机制
  • 【Docker】Docker安装Jenkins一键自动化部署SpringBoot项目使用详解
  • 总结:电容在电路35个基本常识
  • 【Python】控制自己的手机拍照,并自动发送到邮箱
  • YOLOv7、YOLOv5改进之打印热力图可视化:适用于自定义模型,丰富实验数据
  • ChatGPT研究分享:机器第一次开始理解人类世界
  • 博客系统(界面设计)
  • Windows server——部署DNS服务(3)
  • 2022年全国职业院校技能大赛(中职组)网络安全竞赛试题A模块第三套解析教程(详细)
  • SpringBean管理
  • class03:MVVM模型与响应式原理
  • 前端开发神器VS Code安装教程
  • 【蓝桥杯】第十四届蓝桥杯模拟赛(第三期)C++ (弱go的记录,有问题的话求指点)
  • 中科亿海微FPGA