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

蓝桥杯-AB路线(详细原创)

问题描述:

有一个由 N × M 个方格组成的迷宫,每个方格写有一个字母 A 或者 B。小蓝站在迷宫左上角的方格,目标是走到右下角的方格。他每一步可以移动到上下左右相邻的方格去。

由于特殊的原因,小蓝的路线必须先走 K 个 A 格子、再走 K 个 B 格子、再走 K 个 A 格子、再走 K 个 B 格子…如此反复交替。

请你计算小蓝最少需要走多少步,才能到达右下角方格? 注意路线经过的格子数不必一定是 K 的倍数,即最后一段 A 或 B 的格子可以不满 K 个。起点保证是 A 格子。

例如 K=3 时,以下 3 种路线是合法的:

AAA
AAAB
AAABBBAAABBB

以下 3 种路线不合法:

ABABAB
ABBBAAABBB
AAABBBBBBBAAA

输入格式

第一行包含三个整数 N、M 和 K。

以下 N 行,每行包含 M 个字符 ( A 或 B ),代表格子类型。

输出格式

一个整数,代表最少步数。如果无法到达右下角,输出 -1。

样例输入

4 4 2
AAAB
ABAB
BBAB
BAAA

样例输出

8

样例说明

每一步方向如下:下右下右上右下下;路线序列:AABBAABBA。

评测用例规模与约定

对于 20% 的数据,1 ≤ N, M ≤ 4。

对于另 20% 的数据,K=1。

对于 100% 的数据,1 ≤ N, M ≤ 1000,1 ≤ K ≤ 10。

题解:

宽搜bfs题, 用queue队列按要求搜索。

但需要注意 正常二维bfs搜索标记是否访问过的st数组用的二维, 但是这题用的st数组是三维

st含义:

st[x][y][z]: 坐标x, y上的字符, 在第z次访问的时候是否访问过了

如下图:
图中圈起来的B, 当每一步走的是: 下下下下, 此时第一次遍历到B, st[3][0][0] = true, 然后继续 下下下右上上上左, 此时又一次遍历到这个B, st[3][0][2] = true, 最后上右右右下下下下, 到达(n,m)

  • 当第一次遍历到B的时候st中的z = 0, 因为此时的B位于BBB的第一个
  • 当第二次遍历到B的时候st中的z = 2, 因为此时的B位于BBB的第三个

如果我们用的还是二维st, 那么就不可能第二次遍历到B, 也就找不到答案了

ac代码👇

#include <bits/stdc++.h>
using namespace std;
struct Node
{int x, y, deep, step;  // deep深度, step是一共走的步数, 初始位置也算一步, deep初始化是0, step初始化是1
};
const int N = 1e3 + 10;
int n, m, k; 
char g[N][N];
bool st[N][N][20];  // 打标记, 看之前是否走过, 防止进入死循环
int go[N][N] = {{0, 1}, {0, - 1}, {1, 0}, {-1, 0}};  // 四个方向可以走int bfs()
{queue<Node> q;q.push({0, 0, 0, 1}); st[0][0][0] = true; while (q.size()){auto t = q.front();q.pop();if (t.x == n - 1 && t.y == m - 1) return t.deep;  // 找到答案, 返回for (int i = 0; i < 4; i ++){int aa = t.x + go[i][0], bb = t.y + go[i][1], stp = t.step + 1;if (aa < 0 || aa >= n || bb < 0 || bb >= m) continue;  // 超出边界, 跳过循环if (stp > k)   // 需要转换字符{stp = 1;if (g[aa][bb] == g[t.x][t.y]) continue;  // 如果字符跟原来相同, 跳过}else   // 不需要转换字符{if (g[aa][bb] != g[t.x][t.y]) continue;  // 如果字符跟原来不同, 跳过}if (!st[aa][bb][stp])  // 没有访问过{st[aa][bb][stp] = true;q.push({aa, bb, t.deep + 1, stp});}}}return -1;  // 没有找到答案, 无解
}int main()
{cin >> n >> m >> k;for (int i = 0; i < n; i ++) cin >> g[i];int res = bfs();cout << res << endl;return 0;
}

觉得写的不错的话, 点个赞吧~

相关文章:

蓝桥杯-AB路线(详细原创)

问题描述&#xff1a; 有一个由 N M 个方格组成的迷宫&#xff0c;每个方格写有一个字母 A 或者 B。小蓝站在迷宫左上角的方格&#xff0c;目标是走到右下角的方格。他每一步可以移动到上下左右相邻的方格去。 由于特殊的原因&#xff0c;小蓝的路线必须先走 K 个 A 格子、再…...

计算机字符编码的发展

目录 背景 发展 第一阶段&#xff1a;ASCII编码 第二阶段&#xff1a;扩展ASCII编码 第三阶段&#xff1a;各国编码 第四阶段&#xff1a;Unicode编码 第五阶段&#xff1a;UTF系列编码方式 相关扩展 背景 在计算机诞生初期&#xff0c;所有的数据都是基于二进制数&am…...

Java(六)——抽象类与接口

文章目录 抽象类和接口抽象类抽象类的概念抽象类的语法抽象类的特性抽象类的意义 接口接口的概念接口的语法接口的特性接口的使用实现多个接口接口与多态接口间的继承抽象类和接口的区别 抽象类和接口 抽象类 抽象类的概念 Java使用类实例化对象来描述现实生活中的实体&…...

【4.vi编辑器使用(下)】

一、vi编辑器的光标移动 二、vi编辑器查找命令 1、命令&#xff1a;:/string 查找字符串 n&#xff1a;继续查找 N&#xff1a;反向继续查找 /^the 查找以the开头的行 /end 查找以 查找以 查找以结尾的行 三、vi编辑器替换命令 1、语法: : s[范围,范围]str1/str2[g] g表示全…...

【数据结构】探索树中的奇妙世界

专栏介绍&#xff1a; 哈喽大家好&#xff0c;我是野生的编程萌新&#xff0c;首先感谢大家的观看。数据结构的学习者大多有这样的想法&#xff1a;数据结构很重要&#xff0c;一定要学好&#xff0c;但数据结构比较抽象&#xff0c;有些算法理解起来很困难&#xff0c;学的很累…...

搭建YOLOv10环境 训练+推理+模型评估

文章目录 前言一、环境搭建必要环境1. 创建yolov10虚拟环境2. 下载pytorch (pytorch版本>1.8)3. 下载YOLOv10源码4. 安装所需要的依赖包 二、推理测试1. 将如下代码复制到ultralytics文件夹同级目录下并运行 即可得到推理结果2. 关键参数 三、训练及评估1. 数据结构介绍2. 配…...

c++(一)

c&#xff08;一&#xff09; C与C有什么区别命名空间使用 输入输出流引用指针和引用的区别定义拓展 函数重载例子测试函数重载原理 参数默认值什么是参数默认值注意 在c中如何引入c的库动态内存分配new、delete与malloc、free的区别&#xff1f; C与C有什么区别 <1>都是…...

java面试中高频问题----1

一、乐观锁和悲观锁定义、场景怎么判断用什么&#xff1f; 1.乐观锁&#xff1a; 定义&#xff1a;乐观锁假设大多数情况下&#xff0c;资源不会发生冲突。因此&#xff0c;允许多个线程同时访问资源。 场景&#xff1a;读操作多&#xff0c;写操作少&#xff0c;数据冲突概率…...

ABB 控制柜

1&#xff0c;主计算机&#xff1a;相当于电脑的主机&#xff0c;用于存放系统和数据&#xff0c;需要24V直流电才能工作。执行用户编写的程序&#xff0c;控制机器人进行响应的动作。主计算机有很多接口&#xff0c;比如与编程PC连接的服务网口、用于连接示教器的网口、连接轴…...

【错误记录】HarmonyOS 运行报错 ( Failure INSTALL_PARSE_FAILED_USESDK_ERROR )

文章目录 一、报错信息二、问题分析三、解决方案 一、报错信息 在 DevEco Studio 中 , 使用 远程设备 , 向 P40 Failure[INSTALL_PARSE_FAILED_USESDK_ERROR] compileSdkVersion and releaseType of the app do not match the apiVersion and releaseType on the device. 二、…...

使用C语言openssl库实现 RSA加密 和 消息验证

Q&#xff1a;什么是RSA&#xff1f; A&#xff1a;RSA&#xff08;Rivest-Shamir-Adleman&#xff09;是一种非对称加密算法&#xff0c;是最早的一种用于公开密钥加密和数字签名的算法。它使用一对公钥&#xff08;public key&#xff09;和私钥&#xff08;private key&…...

海外投放面试手册

海外投放面试手册 岗位职责&#xff1a; 负责Google 、Facebook、TikTok、Twitter等海外主流广告平台的自主投放操作及合作渠道沟通&#xff1b;负责海外合作渠道媒体的广告投放管理、媒体数据监测、效果分析、优化调整等工作&#xff1b; 3&#xff0e;了解海外各渠道&…...

第十三章 进程与线程

第十三章 进程与线程 程序与进程的概念 程序&#xff1a; 英文单词为Program&#xff0c;是指一系列有序指令的集合&#xff0c;使用编程语言所编写&#xff0c;用于实现一定的功能。 进程&#xff1a; 进程则是指启动后的程序&#xff0c;系统会为进程分配内存空间。 函数式…...

Flink面试整理-对Flink的高级特性如CEP(复杂事件处理)、状态后端选择和调优等有所了解

Apache Flink 提供了一系列高级特性,使其成为一个强大的实时数据处理框架,特别适用于复杂的数据处理场景。其中,复杂事件处理(CEP)、状态后端的选择和调优是其中重要的几个方面。 复杂事件处理(CEP) CEP 概念:CEP 是用于在数据流中识别复杂模式的技术。它允许用户指定事…...

算法:树状数组

文章目录 面试题 10.10. 数字流的秩327. 区间和的个数315. 计算右侧小于当前元素的个数 树状数组可以理解一种数的存储格式。 面试题 10.10. 数字流的秩 假设你正在读取一串整数。每隔一段时间&#xff0c;你希望能找出数字 x 的秩(小于或等于 x 的值的个数)。 请实现数据结构…...

Kafka SASL_SSL集群认证

背景 公司需要对kafka环境进行安全验证,目前考虑到的方案有Kerberos和SSL和SASL_SSL,最终考虑到安全和功能的丰富度,我们最终选择了SASL_SSL方案。处于知识积累的角度,记录一下kafka SASL_SSL安装部署的步骤。 机器规划 目前测试环境公搭建了三台kafka主机服务,现在将详…...

同城交友论坛静态页面app Hbuild

关注...

spring session+redis存储session,实现用户登录功能,并在拦截器里面判断用户session是否过期,过期就跳转到登录页面

在Spring应用中&#xff0c;使用Redis存储Session是一种常见的方式&#xff0c;可以实现分布式环境下的Session管理。以下是实现用户登录功能&#xff0c;并在拦截器中判断Session是否过期并跳转到登录页面的基本步骤&#xff1a; 添加依赖&#xff1a;首先&#xff0c;确保你的…...

Debug-013-el-loading中显示倒计时时间

前言&#xff1a; 今天实现一个小小的优化&#xff0c;业务上是后端需要从设备上拿数据&#xff0c;所以前端需要不断调用一个查询接口&#xff0c;直到后端数据获取完毕&#xff0c;前后端根据一个ending字段为true判断停止调用查询接口。由于这个查询时间比较久&…...

5月29日,每日信息差

第一、据悉&#xff0c;微信视频号直播电商团队将并入到微信开放平台&#xff08;小程序、公众号等&#xff09;团队&#xff0c;原微信视频号直播电商团队转由微信开放平台负责人负责。知情人士表示&#xff0c;此次调整&#xff0c;将有助于微信视频号直播电商业务更好地融入…...

LangChain实战:从零构建一个联网搜索增强的RAG问答系统

1. 为什么需要联网搜索增强的RAG系统 传统的RAG&#xff08;检索增强生成&#xff09;系统有个致命伤——它只能回答知识库里已有的内容。想象一下&#xff0c;你去年精心构建了一个旅游推荐系统&#xff0c;但今年新开的网红景点它完全不知道&#xff0c;因为数据没更新。这就…...

突破reCAPTCHA屏障:EzCaptcha自动化识别实战指南

1. 为什么我们需要自动化处理reCAPTCHA&#xff1f; 每次在网上注册账号或者提交表单时&#xff0c;那个让你"勾选我不是机器人"的小方框&#xff0c;就是reCAPTCHA验证系统。作为谷歌推出的智能验证工具&#xff0c;它确实有效阻止了大量垃圾注册和恶意攻击&#xf…...

如何用零配置小熊猫Dev-C++在5分钟内开启C++编程:完整新手指南

如何用零配置小熊猫Dev-C在5分钟内开启C编程&#xff1a;完整新手指南 【免费下载链接】Dev-CPP A greatly improved Dev-Cpp 项目地址: https://gitcode.com/gh_mirrors/dev/Dev-CPP 对于C初学者来说&#xff0c;最大的障碍往往不是语法本身&#xff0c;而是复杂的环境…...

文脉定序系统一键部署教程:基于Ubuntu 20.04的快速环境搭建

文脉定序系统一键部署教程&#xff1a;基于Ubuntu 20.04的快速环境搭建 你是不是也对那些能理解上下文、进行长文本对话的AI模型感到好奇&#xff1f;想自己动手部署一个来玩玩&#xff0c;但一看到复杂的安装步骤和满屏的命令行就头疼&#xff1f;别担心&#xff0c;今天我就…...

利用Cosmos-Reason1-7B进行技术文档(LaTeX/Markdown)自动摘要与校对

利用Cosmos-Reason1-7B进行技术文档&#xff08;LaTeX/Markdown&#xff09;自动摘要与校对 你有没有过这样的经历&#xff1f;面对一份几十页的技术论文或者一份复杂的实验报告&#xff0c;光是通读一遍就要花掉大半天时间。更别提还要从中提炼核心观点&#xff0c;或者逐字逐…...

从‘知识冲突’到‘对齐’:图解ProGrad如何让CLIP微调既专又通

ProGrad&#xff1a;用向量几何重新思考多模态模型的微调艺术 想象一下&#xff0c;你正在训练一位精通多国语言的老教授学习一门新方言。如果完全放任他自由发挥&#xff0c;可能会丢失原有的语言体系&#xff1b;如果限制太多&#xff0c;又无法适应新语境。这正是CLIP等预训…...

Java毕业设计基于springboot+vue的校内兼职信息管理系统

前言 Spring Boot 校内兼职信息管理系统是以 Spring Boot 框架为核心搭建的&#xff0c;专门用于高效管理校园内各类 兼职信息的平台。随着校园生活的多元化发展&#xff0c;学生对兼职机会的需求日益增长&#xff0c;传统的兼职信息发布与管理方式杂乱无章&#xff0c;存在信息…...

Qwen3-Reranker-0.6B部署教程:对接Weaviate向量数据库Hybrid Search集成

Qwen3-Reranker-0.6B部署教程&#xff1a;对接Weaviate向量数据库Hybrid Search集成 你是不是也遇到过这样的问题&#xff1f;用向量数据库做检索&#xff0c;明明搜出来一堆结果&#xff0c;但排在前面的总感觉不是最想要的。传统的向量相似度搜索&#xff0c;有时候就是差那…...

我把DeepSeek调教成了我的‘专属文案总监’:角色扮演Prompt的实战配置手册

把DeepSeek调教成你的「专属文案总监」&#xff1a;高阶Prompt工程实战指南 当市场部的Lisa第一次用AI生成产品文案时&#xff0c;她得到的是一篇充满技术术语的说明文&#xff1b;而运营总监Mike让AI写的周报&#xff0c;读起来像学术论文。这就像给米其林大厨一台高级烤箱&a…...

Harmonyos应用实例232:蒙特卡洛圆周率计算 (统计与概率)

4. 蒙特卡洛圆周率计算 (统计与概率) 功能介绍: 利用蒙特卡洛方法模拟计算 π\piπ 值。屏幕上显示一个正方形和内切圆,系统随机向正方形内“撒豆子”,通过统计落在圆内和圆外的点数比例来估算圆周率。实时更新计算结果和误差,生动演示概率统计在数学计算中的应用。 // …...