G.AB路线【蓝桥杯】/bfs+可重复走

AB路线

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

bfs+可重复走

思路:本题和传统的bfs题目不同,本题为了满足题目先走K个A再走K个B,可能需要重复走某个格子才能继续走下去,故vis数组可以多开一维,vis[x][y][z]表示第z次走到x行y列这种情况是否出现过
A A A B B B A A A
0 1 2 3 4 5 6 7 8
比如到7这个时,6%(2*k)=0,表示是k次中第0次到达,如果前面已经出现过k次中第0次到达该点这种情况则代表重复了,不行

#include<iostream>
#include<queue>
using namespace std;
struct node
{int x,y,path;
};
char a[1005][1005];
int xx[4]={0,1,0,-1};
int yy[4]={1,0,-1,0};
int vis[1005][1005][12];
int main()
{int n,m,k;cin>>n>>m>>k;for(int i=0;i<n;i++) for(int j=0;j<m;j++) cin>>a[i][j];if(a[0][0]!='A'){cout<<-1<<endl;return 0;}queue<node> q;q.push({0,0,0});vis[0][0][0]=1;bool flag=0;int res;while(!q.empty()){int x=q.front().x;int y=q.front().y;int p=q.front().path;q.pop();//p表示现在是要走第几步p++;char c;//当可以整除k时表示要改变字符if(p%k==0) {(a[x][y]=='A')?c='B':c='A';}else {c=a[x][y];}for(int i=0;i<4;i++){int nx=x+xx[i];int ny=y+yy[i];if(nx<0||nx>=n||ny<0||ny>=m) continue;//p%(2*k)表示现在是k次中第几次走到该点(从0开始)if(vis[nx][ny][p%(2*k)]) continue;if(a[nx][ny]!=c) continue;q.push({nx,ny,p});vis[nx][ny][p%(2*k)]=1;if(nx==n-1&&ny==m-1) {flag=1;res=p;break;}}if(flag) break;}if(flag) cout<<res<<endl;else cout<<-1<<endl;return 0;
}

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

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

相关文章

通用型产品发布解决方案(后端环境搭建)

文章目录 后端renren脚手架配置1.解压后放到项目目录下2.新建商品模块1.创建一个新模块 sunliving-commodity2.删除两个不必要的文件3.pom.xml 引入依赖 3.maven进行聚合管理1.将刚才配置的pom.xml文件复制到父项目下并进行修改2.手动将这个pom.xml加入项目&#xff08;如果右下…

vs2019 里 C++ 20规范的 string 类的源码注释

&#xff08;1&#xff09;读源码&#xff0c;可以让我们更好的使用这个类&#xff0c;掌握这个类&#xff0c;知道咱们使用了库代码以后&#xff0c;程序大致具体是怎么执行的。而不用担心程序出不知名的意外的问题。也便于随后的代码调试。 string 类实际是 库中 basic_strin…

R2S+ZeroTier+Trilium

软路由使用ZeroTier搭建远程笔记 软路由使用ZeroTier搭建远程笔记 环境部署 安装ZeroTier安装trilium 环境 软路由硬件&#xff1a;友善 Nanopo R2S软路由系统&#xff1a;OpenWrt&#xff0c;使用第三方固件nanopi-openwrt。内网穿透&#xff1a;ZeroTier。远程笔记&…

数据分析:基于sparcc的co-occurrence网络

介绍 Sparcc是基于16s或metagenomics数据等计算组成数据之间关联关系的算法。通常使用count matrix数据。 安装Sparcc软件 git clone gitgithub.com:JCSzamosi/SparCC3.git export PATH/path/SparCC3:$PATHwhich SparCC.py导入数据 注&#xff1a;使用rarefy抽平的count ma…

自动驾驶学习2-毫米波雷达

1、简介 1.1 频段 毫米波波长短、频段宽,比较容易实现窄波束,雷达分辨率高,不易受干扰。波长介于1~10mm的电磁波,频率大致范围是30GHz~300GHz 毫米波雷达是测量被测物体相对距离、相对速度、方位的高精度传感器。 车载毫米波雷达主要有24GHz、60GHz、77GHz、79GHz四个频段。 …

Redis数据结构-Dict

1.3 Redis数据结构-Dict 我们知道Redis是一个键值型&#xff08;Key-Value Pair&#xff09;的数据库&#xff0c;我们可以根据键实现快速的增删改查。而键与值的映射关系正是通过Dict来实现的。 Dict由三部分组成&#xff0c;分别是&#xff1a;哈希表&#xff08;DictHashTa…

【InternLM】书生·浦语大模型报名地址

【InternLM】书生浦语大模型报名地址&#xff1a; 扫码报名

药物代谢动力学学习笔记

一、基本概念 二、经典房室模型 三、非线性药物代谢动力学 四、非房室模型 五、药代动力学与药效动力学 六、生物等效性评价 七、生物样品分析方法 基本概念 生物样品&#xff1a;生物机体的全血、血浆、血清、粪便、尿液或其他组织的样品 特异性&#xff0c;specificity&…

cmake调用MSVC编译时报C2071、C2061、C2059、C2449等错误的解决方案

文章目录 1. 问题复述2. 问题原因3. 解决方案 1. 问题复述 项目一直在linux下编译&#xff0c;这次偶然要在windows下使用msvc编译&#xff0c;结果一堆报错&#xff0c;根据报错信息发现语法也没有问题&#xff0c;报错信息如下&#xff1a; 查找文献说是因为有中文注释导致…

Rocketmq如何保证消息不丢失和幂等性

生产者 生产者通过RocketMQ提供的事务消息&#xff08;两阶段提交&#xff09;能保证消息的一致性。 第一阶段给Broker发送一个半事务消息&#xff0c;半事务消息是不能消费的消息&#xff0c;broker已经收到生产者发送的消息&#xff0c;但是并未收到生产者的二次确认&#x…

基于Springboot+Vue+Java的校园资料分享平台

&#x1f49e; 文末获取源码联系 &#x1f649; &#x1f447;&#x1f3fb; 精选专栏推荐收藏订阅 &#x1f447;&#x1f3fb; &#x1f380;《Java 精选实战项目-计算机毕业设计题目推荐-期末大作业》&#x1f618; 更多实战项目~ https://www.yuque.com/liuyixin-rotwn/ei3…

JavaScript使用 BigInt

在 JavaScript 中&#xff0c;最大的安全整数是 2 的 53 次方减 1&#xff0c;即 Number.MAX_SAFE_INTEGER&#xff0c;其值为 9007199254740991。这是因为 JavaScript 中使用双精度浮点数表示数字&#xff0c;双精度浮点数的符号位占 1 位&#xff0c;指数位占 11 位&#xff…