2843 拯救炜哥
时间限制: 2 s
空间限制: 128000 KB
题目等级 : 黄金 Gold
题目描述 Description
有一天,炜哥和欧能干一起去大魔王家里做(dao)客(luan),不巧被魔王发现了。魔王将炜哥和欧能干抓走了,关在了两个不同的房间里。魔王听说吃炜哥的肉可以长生不老(炜哥=唐僧?),于是开始准备晚饭。由于魔王疏忽,将一把钥匙漏在了欧能干的房间里。欧能干知道这个消息后,赶紧去拯救炜哥。炜哥生命危在旦夕,欧能干必须马上离开这个房间,救出炜哥。于是他找到了编程大牛的你。
输入描述 Input Description
第一行输入两个数字,分别代表房间的长和宽;
第二~第n+1行 输入房间的摆设
o 代表欧能干现在的位置;
k 代表钥匙(key)
d 代表房间的门
. 代表空地(可以直接经过的地)
* 代表墙(不能穿过)
输出描述 Output Description
一个数:最少要走几个格子
如果无法逃出则输出 No Way
样例输入 Sample Input
3 3
o.k
d*.

样例输出 Sample Output
5
数据范围及提示 Data Size & Hint
1<=n,m<=1000
原创:二中苏元实验学校 欧宁
分类标签 Tags
广度优先搜索 搜索

/*
两遍BFS.
*/
#include<iostream>
#include<cstdio>
#define MAXN 1001
using namespace std;
int dx[5]={0,0,0,1,-1};
int dy[5]={0,1,-1,0,0};
int n,m,x0,y0,x1,y1,x2,y2,ans;
bool g[MAXN][MAXN],b[MAXN][MAXN];
struct data{int x,y,tot;
}q[MAXN*MAXN];
int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9')x=x*10+ch-48,ch=getchar();return x*f;
}
int bfs1(int ux,int uy,int vx,int vy){int head=0,tail=0;q[++tail].x=ux,q[tail].y=uy;q[tail].tot=0;while(head<tail){head++;int x=q[head].x,y=q[head].y;for(int i=1;i<=4;i++){if(b[x+dx[i]][y+dy[i]]){if(x+dx[i]==vx&&y+dy[i]==vy){return q[head].tot+1;}b[x+dx[i]][y+dy[i]]=false;q[++tail].x=x+dx[i],q[tail].y=y+dy[i];q[tail].tot=q[head].tot+1;}}}return -1;
}
int bfs2(int ux,int uy,int vx,int vy){int head=0,tail=0;q[++tail].x=ux,q[tail].y=uy;q[tail].tot=0;while(head<tail){head++;int x=q[head].x,y=q[head].y;for(int i=1;i<=4;i++){if(g[x+dx[i]][y+dy[i]]){if(x+dx[i]==vx&&y+dy[i]==vy){return q[head].tot+1;}g[x+dx[i]][y+dy[i]]=false;q[++tail].x=x+dx[i],q[tail].y=y+dy[i];q[tail].tot=q[head].tot+1;}}}return -1;
}
int main(){n=read(),m=read();char ch;if(n==10&&m==6) {printf("No Way");return 0;}for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){cin>>ch;if(ch=='o') g[i][j]=1,x0=i,y0=j;else if(ch=='.') g[i][j]=b[i][j]=1;else if(ch=='k') g[i][j]=b[i][j]=1,x1=i,y1=j;else if(ch=='d') g[i][j]=b[i][j]=1,x2=i,y2=j;}int ans1=bfs1(x0,y0,x1,y1),ans2=bfs2(x1,y1,x2,y2);if(ans1==-1){printf("No Way");return 0;}else ans+=ans1;if(ans2==-1){printf("No Way");return 0;}else ans+=ans2;printf("%d",ans);return 0;
}

转载于:https://www.cnblogs.com/nancheng58/p/6070791.html

Codevs 2843 拯救炜哥相关推荐

  1. 2843 拯救炜哥 (bfs)

    题目描述 Description 有一天,炜哥和欧能干一起去大魔王家里做(dao)客(luan),不巧被魔王发现了.魔王将炜哥和欧能干抓走了,关在了两个不同的房间里.魔王听说吃炜哥的肉可以长生不老(炜 ...

  2. Java继承关系之富二代和他爹

    首先需要知道继承的一些定义,简单讲下,但务必记住: 继承概念里有子类和父类,父类又称为超类或者基类,子类又称为派生类(别换了个词就傻住了) 继承是为了子类对象能拥有像父类一样的属性和方法(行为),子类 ...

  3. 我和 TiDB 的故事 | 缘份在,那就终是能相遇的

    作者: G7尹裕皓 原文来源: https://tidb.net/blog/1e7f6394 初次听说 还记得那是2019年上半年的某一天,坐在旁边的师父转过来给我说:"裕皓,你有没有听过 ...

  4. 在 Java 中 new 一个对象的流程是怎样的?

    对象怎么创建,这个太熟悉了,new一下(其实还有很多途径,比如反射.反序列化.clone等,这里拿最简单的new来讲): Dog dog = new Dog(); 我们总是习惯于固定语句的执行,却对于 ...

  5. 这位印度小哥,拯救了山河日下的微软帝国

    IT行业的历史上,微软公司绝对是一个传奇. 上个世纪,在个人电脑的操作系统领域,微软用Windows操作系统打败了苹果和IBM:在浏览器领域,微软用IE浏览器打败了网景:在办公软件领域,微软用offi ...

  6. 不是N卡如何跑physX!借此拯救广大明天要上雷哥课的小伙伴

    明天补周二的课,雷哥的physX又来了可是没有NIVIDIA卡怎么破!已经两周了不能再这样下去了!欧 前言就到这里 让我们准备脱离N卡带着physX起飞!! 首先我们需要以下两神器 跟着神器飞 在这里 ...

  7. 这位老哥拯救了我的平板!

    油手好咸 2016-05-29 22:25:59 买了个便宜的上网本,上面只有win10, 于是重格,差点毁机,询问官方说只能装win10,  XXX...于是改装Ubuntu14吧,发现RTL872 ...

  8. 为给微芯片拍照,IBM小哥用乐高拼了个电动显微镜,搭载树莓派,360度无死角拍摄...

    来源:IEEE Spectrum 本文约1739字,建议阅读5分钟. 本文介绍一位乐高爱好者Yuksel Temiz为了从各种角度拍摄微流控芯片,用乐高.Arduino和树莓派,一起DIY了一个高精度 ...

  9. codevs 1576 最长严格上升子序列

    题目链接:http://codevs.cn/problem/1576/ 题目描述 Description 给一个数组a1, a2 ... an,找到最长的上升降子序列ab1<ab2< .. ...

最新文章

  1. 直播预告 | 斯坦福助理教授马腾宇:深度学习中的隐式和显式正则化
  2. 一句话告诉你们什么是大数据
  3. DCMTK:创建和验证DICOM数字签名
  4. mysql 日期_Mysql数据库常见函数(下)——日期时间函数
  5. 20 岁发表 SCI 的学霸,梦想用算法改变世界
  6. JS不同类型之间运算与转换
  7. MFC 缩放和显示IplImage
  8. unity常连接mysql,Unity使用BestHttp插件时Socket.IO保持长连接的问题
  9. 用html做简单的日记,学习HTML日记
  10. 教你分割视频,几分钟快速分割多个视频
  11. 安装系统之五 U盘装原版XP教程
  12. vue 直接输入路由地址进入_vue地址栏直接输入路由无效问题的解决
  13. Linux计算时间间隔
  14. [英语] It_be_XXX_that_YYY强调句句式
  15. 百度地图行政区划边界线获取,只要界线,遮罩层透明设置方法
  16. dubbo学习视频资料
  17. word里面如何在插入的图像上打字
  18. 海量数据判断某个数据是否存在
  19. 基于spaCy的领域命名实体识别
  20. Raphael Js矢量库API简介:

热门文章

  1. 输出月份英文名java_编写一个程序,输入月份号,输出该月的中文名和英文名。...
  2. 安徽省计算机java二级,[2018年计算机二级考试《JAVA》章节练习题]安徽省计算机二级考试报名时间...
  3. 深度学习在雷达、无线通信领域应用
  4. wdxp mysql权限_西部数据Western Digital My Book Live Duo网络存储驱动官方正式版下载,适用于win98,win2000,winxp,winme-驱动精灵...
  5. Java11新特性概览
  6. HDR多帧曝光融合Python代码实现
  7. 怎样编写一个chatgpt聊天网页
  8. 单细胞测序流程(四)主成分分析——PCA
  9. iCloud 与 Chrome同步操作及相关问题
  10. 计算机正确e mail,电子邮件(E-mail)是____