蓝桥杯备考day3

1.1 DFS模板(深度优先遍历)

  • 模板
全局状态变量
void dfs(当前状态)
{if(当前状态是目标状态) // 判断进行相应处理(输出当前解、更新最优解、退出返回等)// 扩展for(所有可行的新状态){if(新状态没有访问过 && 需要访问) // 可行性剪枝、最优性剪枝、重复性剪枝{标记dfs(新状态);取消标记}}
}
int main()
{...dfs(初始状态);...
}
  • 例题:

    题目描述

    输出自然数 1∼n 所有不重复的排列,即 n 的全排列,要求所产生的任一数字序列中不允许出现重复数字。

    输入格式

    一行,一个整数 n

    输出格式

    输出由 1∼n 组成的所有不重复的数字序列。每行一个序列,行内数字之间用空格隔开。

    样例

    输入:

    3

    输出:

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

    数据范围

    对于 100% 的测试数据满足:1≤n≤9。

代码:

#include<bits/stdc++.h>
using namespace std;
int n,a[10];
bool f[10];void prin(){for(int i=1;i<=n;i++){cout<<a[i]<<" ";}cout<<endl;
} void dfs(int k){for(int i=1;i<=n;i++){if(f[i]==false){a[k]=i;f[i]=true;if(k==n) prin();else dfs(k+1);f[i]=false;}}}int main(){cin>>n;dfs(1);return 0;
}

1.2 BFS模板(广度优先遍历)

  • 模板

    全局状态变量
    void BFS()
    {定义状态队列初始状态入队while(队列不为空){取出队首状态作为当前状态if(当前状态是目标状态)进行相应处理(输出当前解、更新最优解、退出返回等)elsefor(所有可行的新状态){if(新状态没有访问过 && 需要访问){新状态入队}}}
    }
    
  • 例题:

    题目描述

    有一天我做了一个梦,梦见了一种很奇怪的电梯。大楼的每一层楼都可以停电梯,而且第 i层楼(1≤iN*)上有一个数字 Ki(0≤KiN)。电梯只有四个按钮:开,关,上,下。上下的层数等于当前楼层上的那个数字。当然,如果不能满足要求,相应的按钮就会失灵。例如:从一楼开始,3 3 1 2 5代表了Ki(K1=3,K2=3,……) 。在一楼,按“上”可以上 3 层到 4 楼,按“下”是不起作用的,因为没有 -2 楼。那么,从 A 楼到 B 楼至少要按几次按钮呢?

    输入格式

    输入共有二行,第一行为三个用空格隔开的正整数,表示N*,A,B,第二行为 N 个用空格隔开的正整数,表示Ki*。

    输出格式

    输出仅一行,即最少按键次数,若无法到达,则输出 -1。

    样例输入与输出

    输入数据

    5 1 5
    3 3 1 2 5
    

    输出数据

    3
    

    样例解释

    输入解释

    第一行的数据 5表示总共5层楼,第二个数据1表示初始在1楼,第三个数据5表示我们最终的目的地是5楼。
    第二行的数据 第二行输入了5个数,分别表示每一层的电梯能上下几层。
    第一个数3 表示在1楼可以上3层楼,到达4楼;也可以下3层楼,但是我们没有-2层楼,所以从1楼下3层不行。
    第二个数3 表示在2楼可以上3层楼,到达5楼;也可以下3层楼,但是我们没有-1层楼,所以从2楼下3层不行。
    第三个数1 表示在3楼可以上1层楼,到达4楼;也可以下1层楼,到达2楼。

    输出解释

    那么我们初始在1楼,只能上3层到达4楼,在4楼只能下2层到达2楼,然后上3层到达5楼。总共用了3步,所以最终输出3。

    数据范围

    对于 100% 的测试数据满足:1≤N≤200,1≤A,BN

  • 代码:

    #include <bits/stdc++.h>
    using namespace std;int n, a, b; // 输入的数值范围n,起点a,终点b
    int x[205], step[205]; // 数组x用于存储每个位置可以跳跃的步数,step数组用于标记每个位置的步数
    queue<int> q; // 队列用于广度优先搜索// 广度优先搜索函数
    void bfs() {q.push(a); // 将起点a加入队列step[a] = 0; // 将起点的步数标记为0while (!q.empty()) { // 当队列不为空时循环int t = q.front(); // 取出队首元素q.pop(); // 弹出队首元素if (t == b) { // 如果当前位置等于终点bcout << step[b]; // 输出步数return ; // 结束搜索}if (t - x[t] >= 1 && !step[t - x[t]]) { // 如果向下跳不越界且下一个位置未被访问过q.push(t - x[t]); // 将下一个位置加入队列step[t - x[t]] = step[t] + 1; // 更新下一个位置的步数}if (t + x[t] <= n && !step[t + x[t]]) { // 如果向上跳不越界且下一个位置未被访问过q.push(t + x[t]); // 将下一个位置加入队列step[t + x[t]] = step[t] + 1; // 更新下一个位置的步数}}cout << -1; // 如果无法到达终点b,输出-1
    }
    int main()
    {cin >> n >> a >> b; // 输入数值范围n,起点a,终点bfor (int i = 1; i <= n; i++) // 输入每个位置的可跳跃步数cin >> x[i];bfs();  // 进行广度优先搜索
    }

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

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

相关文章

C++ 模拟实现 STL 中的 set、map 与 multiset、multimap

目录 一&#xff0c;RB_tree 的实现 1&#xff0c;RB_tree 的节点与数据结构 2&#xff0c;RB_tree 的迭代器 3&#xff0c;RB_tree 的构造 4&#xff0c;RB_tree 的元素操作 5&#xff0c;完整代码 二&#xff0c;set 与 multiset 的实现 1&#xff0c;set 2&#x…

从零开始:Elasticsearch简介与详解

大家好,我是小米,今天我来和大家聊一聊阿里巴巴面试题中常见的一个话题:Elasticsearch。作为一名喜欢分享技术的小伙伴,我深知在技术的道路上,多一份了解就多一份优势。那么,让我们一起来探索一下Elasticsearch的特点、功能、场景以及与竞品的对比分析吧! 特点 特点是…

js爬虫puppeteer库 解决网页动态渲染无法爬取

我们爬取这个网址上面的股票实时部分宇通客车(600066)_股票价格_行情_走势图—东方财富网 我们用正常的方法爬取会发现爬取不下来&#xff0c;是因为这个网页这里是实时渲染的&#xff0c;我们直接通过网址接口访问这里还没有渲染出来 于是我们可以通过下面的代码来进行爬取: …

1. VirtualBox安装CentOS

安装 VirtualBox 地址:https://www.virtualbox.org/wiki/Downloads 版本: 6.1和7.0+版本都可以 安装: windows上安装需要admin权限,右键菜单选中 “Run as administrator” 安装 CentOS 6.10 地址:https://vault.centos.org/6.10/isos/x86_64/ 版本: 如果不需要GUI,选择…

混合云构建-如何通过Site to Site VPN 连接 AWS 和GCP云并建立一个高可用的VPN通信

如果我们的业务环境既有AWS云又有GCP云,那么就需要将他们打通,最经济便捷的方式就是通过Site-to-Site VPN连接AWS和GCP云,你需要在两个云平台上分别配置VPN网关,并建立一个VPN隧道来安全地连接这两个环境,我们下面演示一个高可用场景下的S2S VPN线路构建,采用动态BGP协议…

利用dbschema工具导出数据库结构

dbschema是SinoDB数据库的一个命令行工具&#xff0c;可以用来导出SinoDB数据库的所有对象&#xff08;如表、触发器、视图等&#xff09;的元数据。以下是常见的使用方法&#xff1a; 1、导出数据库中所有的表结构到文件db.sql $dbschema -d your_database_name -t all db.sq…

岛屿个数c++

参考文章 岛屿个数1岛屿个数2 题目 输入样例&#xff1a; 2 5 5 01111 11001 10101 10001 11111 5 6 111111 100001 010101 100001 111111输出样例&#xff1a; 1 3样例解释 对于第一组数据&#xff0c;包含两个岛屿&#xff0c;下面用不同的数字进行了区分&#xff1a; 0…

Torch not compiled with CUDA enabled问题解决过程记录

1. 背景 运行大模型的时候&#xff0c;出现错误:Torch not compiled with CUDA enabled 原因&#xff1a;并不是电脑安装了nvdia显卡驱动就可以的&#xff0c;还需要安装 NVDIA GPU Computing Toolkit&#xff08;即CUDA Toolkit&#xff09;cudnn 另外还需要确保安装的pyt…

在Go语言中使用select和channel来期待确定性行为

Go开发人员在使用channel时常犯的一个错误是,对select在多个channel中的行为方式做出错误的假设。错误的假设可能会导致难以识别和重现的细微错误。假设我们要实现一个需要从两个channel接收消息的goroutine: 我们可能会决定像下面这样处理优先级: for {select {case v := &…

谷歌地图商家数据采集软件

谷歌地图商家数据采集软件是一款基于谷歌地图的数据采集工具&#xff0c;专为做外贸或商业分析的用户设计。以下是关于该软件的一些主要功能和特点&#xff1a; 广泛的数据采集能力&#xff1a;软件能够采集任意国家、任意地区的商家数据&#xff0c;包括公司地址、电话号码、…

ROS2 采集虚拟仿真环境图像并发布

简介&#xff1a;ROS2功能的学习我们还是在基于OpenAI的gym虚拟仿真环境中来完成&#xff0c;gym虚拟仿真环境安装请参考另一篇教程&#xff0c;这里不再重复说明&#xff0c;接下来我们开始创建一个ROS2的功能节点&#xff0c;并发布虚拟仿真环境小车摄像头的图像&#xff0c;…

day02 VS Code开发单片机

VS Code开发单片机 1.1 安装 MinGW-w64 1)MinGW-w64介绍 VS Code 用于编辑 C 代码,我们还需要 C 编译器来运行 C 代码,所以安装 VS Code之前我们需要先安装 C 编译器。这里我们使用 MinGW-w64(Minimalist GNU for Windows 64-bit)。 MinGW-w64 是一个用于Windows操作系…

SpringBoot和Vue2项目配置https协议

1、SpringBoot项目 ① 去你自己的云申请并下载好相关文件&#xff0c;SpringBoot下载的是Tomcat&#xff08;默认&#xff09;&#xff0c;Vue2下载的是Nginx ② 将下载的压缩包里面的.pfx后缀文件拷贝到项目的resources目录下 ③ 编辑配置文件 &#xff08;主要是框里面的内…

解决苹果iMac的M1芯片Node Sass does not yet support your current environment的问题

问题背景 如图所示&#xff0c;这是我的电脑&#xff0c;M1芯片 启动前端项目老是报错&#xff0c;说node Sass不支持我当前的环境&#xff0c;同事的macBook是intel芯片的&#xff0c;就能跑起项目来 很烦 但是不慌&#xff01;&#xff01;&#xff01; 咱有解决方法啦&a…

Git 自定义命令

前言 在使用 hexo 搭建个人博客时&#xff0c;共两种部署的方法。分别为&#xff1a; 本地利用 hexo 的插件 hexo-deployer-git 来实现部署&#xff0c;缺点是需要多敲几个命令行且不方便对源码进行云端备份使用 Github Action 的 workflow 自动化部署&#xff0c;优势就是可…

云原生__K8S

createrepo --update /var/localrepo/# 禁用 firewall 和 swap [rootmaster ~]# sed /swap/d -i /etc/fstab [rootmaster ~]# swapoff -a [rootmaster ~]# dnf remove -y firewalld-*[rootmaster ~]# vim /etc/hosts 192.168.1.30 harbor 192.168.1.50 master 192.168.1.…

数字货币:金融创新的未来?

随着科技的进步&#xff0c;数字货币作为一种新型的金融工具正逐渐走进人们的视线。那么&#xff0c;数字货币究竟是什么&#xff1f;它有哪些优势&#xff1f;它是否真的能够引领金融创新的未来&#xff1f;本文将从专业角度出发&#xff0c;深入探讨这些问题。 一、数字货币的…

HarmonyOs开发之———页签切换、组件状态管理

谢谢关注!! 前言:上一篇文章主要介绍HarmonyOs开发之———容器组件使用 http://t.csdnimg.cn/r9Qd1 一、Tabs组件页签切换 1、在HarmonyOS中,页签切换可以使用TabList组件来实现。 TabList允许你创建多个页签,并在切换时显示不同的内容。以下是一个页签切换的示例代码…

iOS 启动速度优化

启动耗时&#xff1a;点击App后到首帧显示耗费的时间。 阶段分析&#xff1a;premain、postmain&#xff0c;也就是main函数执行前和main函数执行后。 耗时检测&#xff1a;Instrument->App Launch Premain 减少动态库数量&#xff1a;启动时程序会加载动态库&#xff0c;…

web蓝桥杯真题:新鲜的蔬菜

代码&#xff1a; .box {display: flex; } #box1 {align-items: center;justify-content: center; }#box2 {justify-content: space-between; } #box2 .item:nth-child(2) {align-self: end; }#box3 {justify-content: space-between; } #box3 .item:nth-child(2) {align-self…