题目描述 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

原创:二中苏元实验学校 欧宁

思路:先去拿钥匙,在从拿钥匙的地方走到门,求两次的步数之和

#include<cstdio>
#include<iostream>
#include <string.h>
#include<queue>
using namespace std;
int n,m;
char map[1010][1010];
int dir[4][2] = {-1,0,0,-1,0,1,1,0};
int v[1010][1010]={0};
struct st
{int x,y,c;
};
queue<struct st> Q;
int bfs(st s,st e)
{st temp;int i,j,k;memset(v,0,sizeof(v));v[s.x][s.y] = 1;s.c = 0;Q.push(s);while (!Q.empty()){s = Q.front();Q.pop();if (s.x == e.x && s.y == e.y){return s.c;}for (i=0; i<4; i++){temp.x = dir[i][0] + s.x;temp.y = dir[i][1] + s.y;if (temp.x>=0 && temp.y>=0 && temp.x<n &&temp.y<m && map[temp.x][temp.y] != '*' && !v[temp.x][temp.y]){v[temp.x][temp.y] = 1;temp.c = s.c+1;Q.push(temp);}}}return -1;
}
int main()
{st od,kd,dd;int i,j,num,num2;cin>>n>>m;getchar();for (i=0; i<n; i++){cin>>map[i];}for (i=0; i<n; i++){for (j=0; j<m; j++){if (map[i][j] == 'o'){od.x = i; od.y = j;}else if (map[i][j] == 'k'){kd.x = i; kd.y = j;}else if (map[i][j] == 'd'){dd.x = i; dd.y = j;}}}num = bfs(od,kd);if ( num == -1 ){cout<<"No Way";return 0;}num2 = bfs(kd,dd);if (num2 == -1){cout<<"No Way";return 0;}cout<<num+num2;//最终步数就是拿钥匙的步数和从拿钥匙的 地方到门的步数之和 return 0;
} 

2843 拯救炜哥 (bfs)相关推荐

  1. Codevs 2843 拯救炜哥

    2843 拯救炜哥 时间限制: 2 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 有一天,炜哥和欧能干一起去大魔王家里做(dao)客(luan), ...

  2. HDOJ水题集合5:杂题

    1001 拯救丁爸 BFS模板 拯救丁爸 Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) ...

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

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

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

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

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

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

  6. 搜索算法(一)--DFS/BFS求解拯救同伴问题(JAVA)

    拯救同伴问题 问题描述:假设有如下迷宫,求解从某一点出发到目标位置的最短距离 Input: 5 4 0 0 1 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 1 1 4 3 Ou ...

  7. 【数据结构笔记22】图的遍历例题:拯救007(应用DFS)、六度空间(应用BFS)

    本次笔记内容: 6.3 应用实例:拯救007 6.4 六度空间 文章目录 拯救007 题目与分析 题目 分析 总体算法 六度空间(Six Degrees of Separation) 题目 算法思路 ...

  8. 拯救行动(变种bfs)

    总时间限制: 10000ms 内存限制: 65536kB 描述 公主被恶人抓走,被关押在牢房的某个地方.牢房用N*M (N, M <= 200)的矩阵来表示.矩阵中的每项可以代表道路(@).墙壁 ...

  9. BFS 搜索 Problem 1012 Rescue 拯救天使

    Problem ID:1012 Rescue 简单题意:给出一个地图,其中有一个"a",代表angle,若干个"r",代表去营救angle的朋友,"x ...

最新文章

  1. 命令行程序增加 GUI 外壳
  2. 描述C#多线程中 lock关键字
  3. 电信设备产品简介材料收集
  4. 目前,只有IDEA这款神器能把Java8的数据流问题这么完美的解决掉!
  5. 比特币地址可以查到本人吗_查看每一个地址有多少个比特币
  6. spring 事件模型_Spring–设计领域模型和服务层
  7. facet与compiler不匹配
  8. 2个线程共同处理冒泡排序 Linux 双线程处理
  9. openai-gpt_GPT-3 101:简介
  10. 用c语言实现数字时钟课程设计,基于C51单片机的数字时钟课程设计(C语言,带闹钟).doc...
  11. 渗透测试工具之——WVSS(绿盟web应用漏洞扫描系统)概述
  12. python找不到解释器_为什么pycharm找不到python解释器
  13. CSS3技巧:利用css3径向渐变做一张优惠券
  14. python自动化操作微信_利用Python实现微信半自动化操作!
  15. 随笔二——班主任工作阶段总结
  16. 服务器如果清理垃圾文件,为citrix服务器清理垃圾文件事件
  17. 全程无坑手撸k8s集群
  18. 炒币经验分享给大家,希望对你们有帮助。
  19. 四扫客户接口——接口测试完成文档
  20. Django-应用app名配置中文显示

热门文章

  1. Map reduce程序----求共同好友
  2. 轻量级兼顾本地体验,PWA应用到底有多卷?
  3. 神器 工具 推荐 SRDebugger
  4. Android studio 音乐播放器
  5. 牛牛有一棵n个节点的二叉树,该二叉树每个节点的权值为1。牛牛想要删掉该树其中的k层节点,删除序列为a1,a2...ak。 如有一棵二叉树,删除其中的第3层节点
  6. 用户交互设计经典10个原则
  7. matlab 绘多图 图名,MATLAB中subplot函数来画多图
  8. 蔡司数码视疲劳测试软件_数码视疲劳的治疗
  9. 我心中的计算机作文500,我心中的阳光作文500字4篇
  10. python定义栈_Python开发中栈的定义及用法详解