Codevs 2843 拯救炜哥
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;
}
Codevs 2843 拯救炜哥的更多相关文章
- codevs 3385 拯救Oier(一) Save Oier—first
3385 拯救Oier(一) Save Oier—first 传送门 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 青铜 Bronze 题解 题目描述 Descr ...
- 默 of 2018:年终总结
目录 1 概述:在平凡中求变 2 专业分流:一个时代的终点,我的新起点 2.1 我在专业分流前夕的境况 2.2 专业分流情况概述,以及对一篇文章的回顾 2.3 总结与余绪 2.4 附:关于理科与工科的 ...
- Python-多表关联 外键 级联
分表为什么分表 多表关联多表关系 ****** 表之间的关系 为什么要分表 多对一 一个外键 多对多 一个中间表 两个外键 一对一 一个外键加一个唯一约束外键约束 ****** foreign key ...
- Beta完结--感想及吐槽
Beta冲刺结束啦!!! Beta冲刺结束啦!!! Beta冲刺结束啦!!! 这时候每个人的心情肯定都是非常激动的.随着Beta冲刺的结束,折磨了我们一整个学期的软工实践也差不多结束了.(实在是太不容 ...
- 上个月,我赚了2W外快。。。
前段时间和室友一起给某个公司做了一个管理系统,每个人分2W多.这里和大家分享一下做完项目后一点点感受,想到啥就说点啥. 核心竞争力 两个月就挣了2W块,挣了我爸妈两个人一年的收入,每天还贼辛苦,披星戴 ...
- Codevs 2875 RY哥查字典
时间限制: 1 s 空间限制: 16000 KB 题目等级 : 钻石 Diamond 题目描述 Description RY哥最近新买了一本字典,他十分高兴,因为这上面的单词都十分的和谐,他天天 ...
- 江哥的dp题a(codevs 4815)
题目描述 Description 给出一个长度为N的序列A(A1,A2,A3,...,AN).现选择K个互不相同的元素,要求: 1.两两元素互不相邻 2.元素值之和最大 输入描述 Input Desc ...
- 拯救小矮人(codevs 2544)
题目描述 Description 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的肩膀上,知道最顶端的小矮人伸直胳膊可以碰到陷阱口.对于每一个 ...
- 匈牙利算法 codevs 2776 寻找代表元
codevs 2776 寻找代表元 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题目描述 Description 广州二中苏元实验学校一共有n个社团,分别用 ...
随机推荐
- Headless MSBuild Support for SSDT (*.sqlproj) Projects [利用msbuild自动化部署 .sqlproj]- 摘自网络
Update: breaking change: http://sqlproj.com/index.php/2012/10/dacfx-sept-2012-updates-break-headless ...
- IE-首页跳转到 q160的问题解决
IE首页跳转到 q160的问题解决 服了又中找了,IE快捷方式被 www.q160.com劫持 该死的这个网站什么也没有做,就是做了一个google搜索的连接. 进行了一次搜索 http: ...
- JavaScript constructors, prototypes, and the `new` keyword
Are you baffled(阻碍:使迷惑) by the new operator in JavaScript? Wonder what the difference between a func ...
- hdoj 2546 饭卡
饭卡 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...
- 包含块、层叠上下文、BFC
包含块 什么是包含块?简单来说,就是决定一个元素大小和定位的元素.一个元素会为它的内部元素创建包含块,但也不能说元素的包含块就是它的父元素: 1.position:fixed 的元素 包含块是当前可视 ...
- JS----构造函数与原型prototype 区别
构造函数方法很好用,但是存在一个浪费内存 通过原型法分配的函数是所有对象共享的.通过原型法分配的属性是独立.-----如果你不修改属性,他们是共享 如果我们希望所有的对象使用同一一个函数,最好使用原型 ...
- 关闭utorrent的广告
版本:3.4.9 / 方法来源:wikihow. 在"选项-高级"里将下面的选项全部改成false. offers.left_rail_offer_enabledoffers.sp ...
- DevExpress GridControl GridView 导出到 Excel 类
说明: 1>GridView 导出到 Excel (如果分页,只导出当前页数据) 2>GridView 导出到 Excel 3>方法2可以参考DataTable 导出到 Excel ...
- 服务框架HSF分析之一容器启动
大家平时都在用这个服务框架.简单阅读了下代码,了解其原理可以方便解决一些常见hsf的问题.限于篇幅,整个分析将分几个系列发布.第一篇将简单介绍Hsf的启动和各组件之间关系. 一. Hsf总体架构 这 ...
- 使用webview如何做超时判断
在加载网页时给一个timer定时器,规定超时时间,然后再超时时间的方法中提示超时 如果没有超时,则在webview协议中的“加载完成”方法中 取消timer定时器 - (void)openWebVie ...