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

【洛谷刷题】蓝桥杯专题突破-广度优先搜索-bfs(13)

目录

写在前面:

题目:P1443 马的遍历 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

        题目描述:

        输入格式:

        输出格式:

        输入样例:

        输出样例:

解题思路:

代码:

AC !!!!!!!!!!

写在最后:


写在前面:

怎么样才能学好一个算法?

我个人认为,系统性的刷题尤为重要,

所以,为了学好广度优先搜索,为了用好搜索应对蓝桥杯,

事不宜迟,我们即刻开始刷题!

题目:P1443 马的遍历 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题目描述:

输入格式:

输入只有一行四个整数,分别为n, m, x, y。

输出格式:

一个 n × m 的矩阵,代表马到达某个点最少要走几步(不能到达则输出 −1)。

输入样例:

3 3 1 1

输出样例:


输出 #1复制
0    3    2    
3    -1   1    
2    1    4   

解题思路:

我们根据这道题的数据范围,可以判断出,

这道题需要使用广度优先搜索,题目要求是,

找出马到一个点最少需要几步,

我们用bfs,一层层搜索他的情况即可,

那么我们先来模拟一下题目给出的用例:

这个是我们的起点:

 在象棋中,马走日字,在这个矩阵中,

它有两个位置可以走:

所以那两个位置被置为1,

表明马已经走了一步,

我们让马继续走:

马有走到这些位置,

继续记录路径和:

 马继续走,以此类推,最后就会走到目标点位:

 

 我们根据上面的规律实现代码,

但是这一次,我打算换一种方式,

因为调用STL库中的队列速度是比较慢的,

我们可以自己用数组模拟一个队列,

这样可以加快效率,

我们应该怎么实现呢?

我们可以用头尾两个指针维护这个队列,

往队列插入一个数:

 如果要出队,那就让队头++,

这样就访问不了那个数了:

如果要入队,

就让队尾 tail++,再q[tail] = x。

如果队头大于队尾,那就证明队列为空:

  

下面是代码实现:

代码:

//包好头文件
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>using namespace std;int n, m, x, y;const int N = 500;//存坐标
typedef pair<int, int> PII;//存马的步数
int dist[N][N];//用数组模拟队列
PII q[N * N];//存坐标偏移量
int dx[] = {2, 2, 1, 1, -1, -1, -2, -2};
int dy[] = {1, -1, 2, -2, 2, -2, 1, -1};void bfs(int x, int y)
{//初始化memset(dist, -1, sizeof(dist));//插入第一个数据q[0] = {x, y};dist[x][y] = 0;int head = 0;int tail = 0;//如果头指针大于尾指针,证明队列为空while(head <= tail){auto t = q[head];head++;for(int i = 0; i < 8; i++){int a = dx[i] + t.first;int b = dy[i] + t.second;//控边界if(a < 1 || a > n || b < 1 || b > m) continue;if(dist[a][b] >= 0) continue;//记录马的步数dist[a][b] = dist[t.first][t.second] + 1;//入队tail++;q[tail] = {a, b};   }}
}int main()
{scanf("%d %d %d %d", &n, &m, &x, &y);bfs(x, y);for(int i = 1; i <= n; i++){for(int j = 1; j <= m; j++){printf("%-5d", dist[i][j]);}printf("\n");}return 0;
}

AC !!!!!!!!!!

写在最后:

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

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

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

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

相关文章:

【洛谷刷题】蓝桥杯专题突破-广度优先搜索-bfs(13)

目录 写在前面&#xff1a; 题目&#xff1a;P1443 马的遍历 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目描述&#xff1a; 输入格式&#xff1a; 输出格式&#xff1a; 输入样例&#xff1a; 输出样例&#xff1a; 解题思路&#xff1a; 代码&#xff1a; AC &am…...

【新2023Q2模拟题JAVA】华为OD机试 - 总最快检测效率 or 核酸检测效率

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:报数 题目 一百个人围成一圈…...

基于主成分分析的混音方法

一、简介&#xff1a; 基于主成分分析的混音方法是一种常见的音频混音技术&#xff0c;它利用主成分分析&#xff08;PCA&#xff09;对音频信号进行降维和重构&#xff0c;从而实现混音。 二、基本步骤如下&#xff1a; 采集和存储需要混音的音频信号。 对音频信号进行主成分…...

Code Two Exchange Crack

CodeTwo Exchange 迁移允许直接从早期版本的 Exchange&#xff08;从 Exchange 2010 开始&#xff09;安全、轻松地迁移到 Exchange 2019 和 2016。此服务器应用程序还允许您集中管理来自 Microsoft 365 (Office 365) 的邮箱迁移以及来自基于 IMAP 的电子邮件系统&#xff08;例…...

jQuery.form.js 详细用法_维护老项目使用

概述 jquery-3.3.1.min.js &#xff1a; http://jquery.com/download jquery.form.min.js &#xff1a;http://malsup.com/jquery/form/#tab7 jquery form 是一个表单异步提交的插件&#xff0c;可以很容易提交表单&#xff0c;设置表单提交的参数&#xff0c;并在表单提交前…...

【Java】关于你不知道的Java大整数运算之BigInteger类超级好用!!!

目录 一、BigInteger类简单介绍 二、BigInteger构造方式 &#xff08;1&#xff09;构造方式 &#xff08;2&#xff09;输入方式 三、BigInteger常见的成员方法 &#xff08;1&#xff09;方法介绍 &#xff08;2&#xff09;方法使用演示 1.加减乘除余 2.比较 3.绝…...

运维是不是没有出路了?

瑞典马工的​​《是时候让运维集体下岗了》一出&#xff0c;就让运维人为之一颤&#xff0c;​人人自危。文章开篇就提到&#xff1a;​​明人不说暗话&#xff0c;在云原生和DevOps成熟的今天&#xff0c;运维作为一个岗位和团队已经完成了历史任务&#xff0c;应该退出舞台了…...

【C++笔试强训】第七天

选择题 解析&#xff1a;内联函数&#xff08;inline&#xff09;一般用于代码较少&#xff0c;代码块里面没有递归且频繁调用的函数&#xff0c;是一种以空间换时间&#xff08;不是指内存&#xff0c;而是指令变多编译出来的可执行程序会变大&#xff09;的做法。内联函数在预…...

mysql binlog 一直追加写,磁盘满了怎么办?

文章目录 mysql binlog 清理策略1、设置binlog最大的文件数和文件大小2、定时清理过期binlog文件3、手动清理binlog文件4、禁用或启用binlogmysql binlog用于记录mysql数据库所有变更(数据库的DDL、DML操作)包括用户执行的语句,以及底层引擎所执行的操作的二进制日志,主要用…...

缓存穿透、缓存雪崩、缓存击穿解决方案

什么是缓存 缓存就是数据交换的缓冲区&#xff08;称作Cache&#xff09;,是存贮数据的临时地方&#xff0c;一般读写性能较高。 添加 redis 缓存 给店铺类型查询业务添加缓存 需求&#xff1a;添加ShopTypeController中的queryTypeList方法&#xff0c;添加查询缓存 缓存更新…...

web + servlet + jdbc mysql 实现简单的表单管理界面

目录数据库创建数据库连接servlet创建,这里注意一下我的数据库我自己改了一下名字lhx网页html运行文件目录展示首先我们准备好开发使用的工具以及配置 idea2020 tomcat8.5 创建javaweb参考idea编译Tomcat详细步骤 IDEA通过JDBC连接数据库请参考jdbc连接数据库 需要登陆注册界面…...

Maven 国内镜像仓库

镜像仓库目标 当我们未定义任何远程仓库时&#xff0c;使用 Maven 更新依赖时&#xff0c;其会去默认远程仓库中拉取&#xff0c;默认远程仓库 是国外地址&#xff0c;所以在国内访问特别慢&#xff0c;想提升访问速度&#xff0c;需要将国外地址换成国内地址 更换仓库地址的…...

day21 ● 530.二叉搜索树的最小绝对差 ● 501.二叉搜索树中的众数 ● 236. 二叉树的最近公共祖先

二叉搜索树的最小绝对差 二叉搜索树&#xff08;Binary Search Tree&#xff0c;简称 BST&#xff09;是一种特殊的二叉树&#xff0c;它的每个节点都满足以下条件&#xff1a; 左子树上所有节点的值均小于该节点的值&#xff1b;右子树上所有节点的值均大于该节点的值&#…...

大学计算机(软件类)专业推荐竞赛 / 证书 官网及赛事相关信息整理

大学计算机专业(软件)推荐竞赛 / 证书 官网及赛事相关信息 一、算法类(丰富简历)&#xff1a; 1、ACM国际大学生程序设计竞赛&#xff1a; 官网&#xff1a;https://icpc.global/ 国内&#xff1a;http://icpc.pku.edu.cn/index.htm 报名方式&#xff1a;区域预赛一般每年9-1…...

Metasploit入门到高级【第九章】

预计更新第一章&#xff1a;Metasploit 简介 Metasploit 是什么Metasploit 的历史和发展Metasploit 的组成部分 第二章&#xff1a;Kali Linux 入门 Kali Linux 简介Kali Linux 安装和配置常用命令和工具介绍 第三章&#xff1a;Metasploit 基础 Metasploit 的基本概念Met…...

JDK之8后: 协程? 虚拟线程!!!

特性官方文档: https://openjdk.org/jeps/436 Java协程 近三十年来&#xff0c;Java 开发人员一直依赖线程作为并发服务器应用程序的构建块。每个方法中的每个语句都在线程内执行&#xff0c;并且由于 Java 是多线程的&#xff0c;因此多个执行线程同时发生。线程是Java的并发…...

体验 jeecg

体验 jeecg官网地址事前准备安装升级 node 和 npm 版本验证安装安装 pnpm clidocker 启动 MySQLdocker 启动 redisgit clone 项目启动JAVA项目 jeecg-boot启动Vue3项目 jeecgboot-vue3官网地址 http://www.jeecg.com/ 事前准备 (1) 为了回避Could not find artifact com.mic…...

投稿指南【NO.13】计算机学会CCF推荐期刊和会议分享(人工智能)

前 言国内高等院校研究生及博士毕业条件需要发表高水平期刊或者顶会&#xff08;清北上交等重点学校毕业要求为至少发一篇顶会&#xff09;&#xff0c;很多同学私信问到一级学会的会议论文怎么找、是什么&#xff0c;比如前段时间放榜的CVPR论文就是人工智能领域的顶会国际会议…...

一份sql笔试

1、 select substr(time,1,10),count(order_id),count(distinct passenger_id) from order where substr(time,1,7)2023-08 group by substr(time,1,10) order by substr(time,1,10);2、 select city_id from (select * from order where substr(time,1,7) 2022-08) t1 left j…...

交换瓶子

交换瓶子 贡献者&#xff1a;programmer_ada 有N个瓶子&#xff0c;编号 1 ~ N&#xff0c;放在架子上。 比如有5个瓶子&#xff1a; 2 1 3 5 4 要求每次拿起2个瓶子&#xff0c;交换它们的位置。 经过若干次后&#xff0c;使得瓶子的序号为&#xff1a; 1 2 3 4 5 对于这么…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

Qt 事件处理中 return 的深入解析

Qt 事件处理中 return 的深入解析 在 Qt 事件处理中&#xff0c;return 语句的使用是另一个关键概念&#xff0c;它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别&#xff1a;不同层级的事件处理 方…...

保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!

目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...

鸿蒙(HarmonyOS5)实现跳一跳小游戏

下面我将介绍如何使用鸿蒙的ArkUI框架&#xff0c;实现一个简单的跳一跳小游戏。 1. 项目结构 src/main/ets/ ├── MainAbility │ ├── pages │ │ ├── Index.ets // 主页面 │ │ └── GamePage.ets // 游戏页面 │ └── model │ …...