小白月赛13 小A与小B (双向BFS)
链接:https://ac.nowcoder.com/acm/contest/549/G
来源:牛客网
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
输入描述:
第一行两个整数N,M分别表示迷宫的行和列。接下来一个N×M的矩阵其中"C"表示小A的位置,"D"表示小B的的位置,"#"表示不可通过的障碍,"."则是可以正常通过的位置。字符用空格隔开第一行两个整数N,M分别表示迷宫的行和列。接下来一个N×M的矩阵其中"C"表示小A的位置,"D"表示小B的的位置,"#"表示不可通过的障碍,"."则是可以正常通过的位置。字符用空格隔开
输出描述:
如果可以相遇,第一行输出一个YES,第二行一个整数输出最短的相遇时间。
否则就输出一个NO表示不能相遇。
备注:
1≤n,m≤10001≤n,m≤1000 解题思路:将小A的起始位置与小B的起始位置都加入到队列中,同时跑BFS,判断是否走过对方已走过的位置,如果已走过,就结束就可以了。
代码:
#include<bits/stdc++.h>
using namespace std;
char mp[][];
int n,m,vis[][];
int dir[][]={{-,},{,},{,-},{,},{,},{,-},{-,},{-,-}};
struct node{
int x,y,step,id;
node(int aa,int bb,int a,int b){
x=aa;
y=bb;
step=a;
id=b;
}
};
queue<node> que;
int bfs(){
while(que.size()){
node now=que.front();
que.pop();
if(now.id==){
for(int i=;i<;i++){
int dx=now.x+dir[i][];
int dy=now.y+dir[i][];
if(vis[dx][dy]==) return now.step+;
if(dx>=&&dx<n&&dy>=&&dy<m&&mp[dx][dy]!='#'&&!vis[dx][dy]){
que.push(node(dx,dy,now.step+,now.id));
vis[dx][dy]=now.id;
}
}
}else{
for(int i=;i<;i++){
int dx=now.x+dir[i][];
int dy=now.y+dir[i][];
if(vis[dx][dy]==) return now.step+;
if(dx>=&&dx<n&&dy>=&&dy<m&&mp[dx][dy]!='#'){
vis[dx][dy]=now.id;
for(int i=;i<;i++){
int ddx=dx+dir[i][];
int ddy=dy+dir[i][];
if(vis[ddx][ddy]==) return now.step+;
if(ddx>=&&ddx<n&&ddy>=&&ddy<m&&mp[ddx][ddy]!='#'&&!vis[ddx][ddy]){
que.push(node(ddx,ddy,now.step+,now.id));
vis[ddx][ddy]=now.id;
}
}
}
}
}
}
return -;
}
int main(){
cin>>n>>m;
memset(vis,,sizeof(vis));
for(int i=;i<n;i++)
for(int j=;j<m;j++)
{
cin>>mp[i][j];
if(mp[i][j]=='C'){
que.push(node(i,j,,));
vis[i][j]=;
}else if(mp[i][j]=='D'){
que.push(node(i,j,,));
vis[i][j]=;
}
}
int ans=bfs();
if(ans==-)puts("NO");
else{
puts("YES");
cout<<ans<<endl;
}
return ;
}
小白月赛13 小A与小B (双向BFS)的更多相关文章
- 小白月赛13 小A的柱状图 (单调栈)
链接:https://ac.nowcoder.com/acm/contest/549/H来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言52428 ...
- 小白月赛13 小A的路径 (矩阵快速幂求距离为k的路径数)
链接:https://ac.nowcoder.com/acm/contest/549/E来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言52428 ...
- 牛客小白月赛13 小A买彩票 (记忆化搜索)
链接:https://ac.nowcoder.com/acm/contest/549/C来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言52428 ...
- 小白月赛13 B小A的回文串 (马拉车算法求最长回文子串)
链接:https://ac.nowcoder.com/acm/contest/549/B来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言52428 ...
- 单调栈+前缀和 || Nowcoder || 牛客小白月赛13 || 小A的柱状图
题面:小A的柱状图 题解:无 代码: #include<cstdio> #include<cstring> #include<iostream> #define l ...
- 牛客小白月赛13 小A的柱状图(单调栈)
链接:https://ac.nowcoder.com/acm/contest/549/H来源:牛客网 题目描述 柱状图是有一些宽度相等的矩形下端对齐以后横向排列的图形,但是小A的柱状图却不是一个规范的 ...
- 牛客小白月赛13 小A的回文串(Manacher)
链接:https://ac.nowcoder.com/acm/contest/549/B来源:牛客网 题目描述 小A非常喜欢回文串,当然我们都知道回文串这种情况是非常特殊的.所以小A只想知道给定的一个 ...
- 牛客小白月赛13 小A的最短路(lca+RMQ)
链接:https://ac.nowcoder.com/acm/contest/549/F来源:牛客网 题目描述 小A这次来到一个景区去旅游,景区里面有N个景点,景点之间有N-1条路径.小A从当前的一个 ...
- 牛客小白月赛13 G(双向搜索)
AC通道 两边同步搜,一步里面A走一次B走两次,遇到对方走过的地方就得到了答案. #include <bits/stdc++.h> using namespace std; const i ...
随机推荐
- OO第二单元总结
这一单元作业是围绕电梯调度进行展开,并引进了多线程的概念.与第一次作业比较类似,作业难度也是逐渐推进,从最开始的单部电梯先来先服务(傻瓜式调度),到之后的单部电梯可稍带调度,到最后的多部电梯分楼层调度 ...
- 程序员50题(JS版本)(九)
程序41:八进制转换为十进制 var num1=425; var num2=0; num1=num1.toString(); for(var i=num1.length-1,root=1;i>= ...
- 未找到导入的项目“C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\DotNet\Microsoft.DotNet.Props”
未找到导入的项目“C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\DotNet\Microsoft.DotNet.Props” ...
- rocketmq有序消息
RocketMQ提供的顺序消费消息实现是使用的FIFO 先进先出算法 Producer消息发送 public class Producer { public static void main(Stri ...
- Python 经典面试题汇总之数据库篇
数据库和缓存 1.列举常见的关系型数据库和非关系型都有那些? 关系型数据库(需要有表结构) mysql.oracle.splserver.postgresql.db2.sybase 非关系型数据库(是 ...
- 我的Windows日常——Excel 打开.xls .xlsx 文件格式或文件扩展名无效
就问下各位,这个图,熟不熟?!! 不熟? 好吧当我没问,遇到过的没遇到过的都让我继续写下去吧.... 很多时候,我们新建了一个word文件,但是打开却会弹出这个小窗口,新建的文件出现这个问题,是什么原 ...
- 浅析C#中new、override、virtual关键字的区别
Virtual : virtual 关键字用于修饰方法.属性.索引器或事件声明,并使它们可以在派生类中被重写. 默认情况下,方法是非虚拟的.不能重写非虚方法. virtual 修饰符不能与 stati ...
- python接口自动化-session_自动发文
一.session简介 查看 requests.session() 帮助文档(只贴了一部分内容) import requests help(requests.session()) class Sess ...
- centos7下给bond网卡配置bridge桥接
这篇的主题可以用几个关键字组合:centos7+kvm + bond + bridge .brige主要用在KVM虚拟化环境下,而bond是进行物理层面的冗余.具体配置信息如下 物理网卡名称:enp0 ...
- .NET开源快速开发框架Colder发布 (NET452+AdminLTE版)
.NET开源快速开发框架Colder(NET452+AdminLTE版) 引言 半年前将基于Easyui的快速开发框架开源,三个版本(NET4.52,NETCore和NET4.0)总共荣获200+星, ...