D - Snaky Walk(BFS)

news/2025/1/8 13:11:29/文章来源:https://www.cnblogs.com/benscode/p/18659517

题目链接:https://atcoder.jp/contests/abc387/tasks/abc387_d

题意:

从S点出发,返回到G点所需的步数。每次移动的方向有限制,如果上次是上下移动,那么这次就必须是左右移动。开始时可以从上下左右四个方向开始移动

思路:

BFS,分情况讨论,即开始是上下移动开始是左右移动两种不同情况,可以用结构体存储步数和移动朝向(也可以直接在地图上标注移动步数), 注意不能移动到一格两次,以及不能越界或者到有阻挡的位置

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int h,w;
struct node{int x;int y;int step;int op;
};
int dx[]={1,-1,0,0};
int dy[]={0,0,-1,1};const int maxn=1e3+5;
char maze[maxn][maxn];
int bfs(queue<node>q,int stx,int sty,int edx,int edy,int op,bool p[][maxn]);
bool isok(int nx,int ny)
{if(nx>=1&&nx<=h&&ny>=1&&ny<=w&&maze[nx][ny]!='#')return true;return false;
}
signed main()
{ios::sync_with_stdio(false),cin.tie(0);cin>>h>>w;int stx,sty;int edx,edy;for(int i=1;i<=h;i++){for(int j=1;j<=w;j++){cin>>maze[i][j];if(maze[i][j]=='S'){stx=i;sty=j;}if(maze[i][j]=='G'){edx=i;edy=j;}}}bool v[maxn][maxn];bool h[maxn][maxn];memset(v,true,sizeof(v));			memset(h,true,sizeof(h));		queue<node>q1;queue<node>q2;		int a=bfs(q1,stx,sty,edx,edy,0,v);int b=bfs(q2,stx,sty,edx,edy,1,h);if(a>0&&b>0)cout<<min(a,b);else cout<<max(a,b);return 0;
}
int bfs(queue<node>q,int stx,int sty,int edx,int edy,int op,bool p[][maxn])
{//op0代表竖着走 q.push(node{stx,sty,0,op});p[stx][sty]=false;while(!q.empty()){node x=q.front();q.pop();if(x.x==edx&&x.y==edy){return x.step;}if(x.op==0){for(int i=0;i<2;i++){int nx=x.x+dx[i];int ny=x.y;if(isok(nx,ny)&&p[nx][ny]){q.push(node{nx,ny,x.step+1,1});p[nx][ny]=false;}	}}else if(x.op==1){for(int i=2;i<4;i++){int nx=x.x;int ny=x.y+dy[i];if(isok(nx,ny)&&p[nx][ny]){q.push(node{nx,ny,x.step+1,0});p[nx][ny]=false;}}}}return -1;
}

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

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

相关文章

BOS或客户端清理服务器设置历史记录

1、客户端服务器设置中“清除全部记录”2、反编译Kingdee.BOS.IDE.exe, 查找配置文件修改, C:\Users\HUAXIN\Documents\Kingdee\K3Cloud\LoginInfo.xml

R语言系列—R语言简介及安装

同学们,大家好,今天开始开设一个新系列,R语言系列,对生信分析中涉及到的R语言代码及R语言绘图进行详细讲解,感兴趣的同学可以重点关注一下。 什么是R语言?R语言是用于统计分析、绘图的语言和操作环境。R语言是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用…

146. LRU 缓存(中)

目录题目法一、Map法二、双向链表 题目法一、Map对于超出容量时,删除最久未使用的关键字:在进行put和get时,只要存在就先删再重新放入map,保证了最久未使用的关键字处于map的第一个/*** @param {number} capacity*/ var LRUCache = function(capacity) {this.capacity = ca…

Linux使用dmidecode来查看机器有几根内存插槽,哪个槽上有内存

直接输入dmidecode即可,输出有很多,好像是根据SM总线来查询的,包括能查询到BIOS的地址空间和其中的信息等等,内存信息只是其中的一部分。摘录如下: dmidecode -t memory从这段输出可以看出,第一个Physical Memory Array是总体的内存信息,从这里可以看到有四个内存插槽、…

告别混乱!电商新年团队协作工具助你轻松应战

新年期间电商团队面临着巨大的工作量,而看板软件凭借其任务的可视化与分配、进度的实时跟踪与更新、沟通与协作的强化、个性化与定制化的满足以及多平台支持与便捷的移动办公等功能,成为了团队高效协作与沟通的得力助手,确保了电商业务在新年期间的平稳运行。看板软件凭借其…

整车电性能测试服务及设备开发

随着车辆电气化程度越来越高,整车电气系统面对更加严苛的工作环境,如何保障整车的电气可靠性越来越得到主机厂的关注。整车电性能测试是汽车电气系统开发过程中的一个关键环节,经纬恒润结合多年的整车电气工程经验,深度分解“整车-系统-子系统-部件-信号”等多个级别的性能…

springboot+shardingsphere实现读写分离和分表

参考:https://blog.csdn.net/weixin_44606481/article/details/140955787 前提:数据库配置了主从数据同步 1、依赖 <dependencies><dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-jdbc-core-spring-boo…

uniapp 荣耀手机 没有检测到设备 运行到Android手机 真机运行

背景: 使用uniapp框架搭建的项目,开发的时候在浏览器运行,因为项目要打包成App,所以需要真机联调,需要运行到Android手机,在手机上查看/运行项目。通过真机调试才能确保软件开发的准确性和页面显示的完整性。操作步骤:1.Usb连接手机和电脑,电脑上的HbuilderX打开项目;…

DC-5 靶场通关小记

rustscan端口扫描指纹识别、LFI漏洞+文件包含(nginx日志)GetShell、screen-4.5.0提权地址 https://www.vulnhub.com/entry/dc-5,314/环境配置 有兼容性问题参考 https://www.cnblogs.com/lrui1/p/18655388 信息收集 ./rustscan -a 192.168.74.130 -- -A -sC Open 192.168.74.13…

ABB IRB5500喷涂机械手维修细节查看

ABB IRB5500喷涂机器人的控制柜常见故障表现形式主要包括以下几种:1、控制柜不能启动:可能原因包括电源故障、控制电路板损坏、保险丝烧断等。处理方法包括检查电源是否正常、控制电路板是否有损坏迹象、保险丝是否烧断等。 2、abb涂装机械手控制柜报错或异常:可能原因包括…

新年新机遇:跨境电商选品策略大揭秘

跨境电商在进行新年选品时,需要综合考虑市场调研、竞争对手分析、品牌选择、价格定位、物流考虑、汇率研究、多元化产品线以及节日和特殊事件等多个因素。通过精心策划和准备,可以确保所选产品在新年期间取得良好的销售业绩。在进行跨境电商新年选品时,需要考虑多个因素以确…

年度重磅 |《2024华为开发者宝典》免费下载,多维度解读华为根生态技术

摘要:20多位华为云DTSE专家打造,10+技术领域全覆盖,图文干货+视频讲解,多维度解读华为根生态技术,拥抱技术变革,开启创新之旅。 一年一度!大家最期待的华为开发者宝典新鲜出炉!在刚刚过去的2024年,华为云开发者联盟通过25场精彩的DTSE Tech Talk直播活动,为广大开发者…