2843 拯救炜哥 (bfs)
有一天,炜哥和欧能干一起去大魔王家里做(dao)客(luan),不巧被魔王发现了。魔王将炜哥和欧能干抓走了,关在了两个不同的房间里。魔王听说吃炜哥的肉可以长生不老(炜哥=唐僧?),于是开始准备晚饭。由于魔王疏忽,将一把钥匙漏在了欧能干的房间里。欧能干知道这个消息后,赶紧去拯救炜哥。炜哥生命危在旦夕,欧能干必须马上离开这个房间,救出炜哥。于是他找到了编程大牛的你。
第一行输入两个数字,分别代表房间的长和宽;
第二~第n+1行 输入房间的摆设
o 代表欧能干现在的位置;
k 代表钥匙(key)
d 代表房间的门
. 代表空地(可以直接经过的地)
* 代表墙(不能穿过)
一个数:最少要走几个格子
如果无法逃出则输出 No Way
3 3
o.k
d*.
...
5
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)相关推荐
- Codevs 2843 拯救炜哥
2843 拯救炜哥 时间限制: 2 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 有一天,炜哥和欧能干一起去大魔王家里做(dao)客(luan), ...
- HDOJ水题集合5:杂题
1001 拯救丁爸 BFS模板 拯救丁爸 Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) ...
- Java继承关系之富二代和他爹
首先需要知道继承的一些定义,简单讲下,但务必记住: 继承概念里有子类和父类,父类又称为超类或者基类,子类又称为派生类(别换了个词就傻住了) 继承是为了子类对象能拥有像父类一样的属性和方法(行为),子类 ...
- 我和 TiDB 的故事 | 缘份在,那就终是能相遇的
作者: G7尹裕皓 原文来源: https://tidb.net/blog/1e7f6394 初次听说 还记得那是2019年上半年的某一天,坐在旁边的师父转过来给我说:"裕皓,你有没有听过 ...
- 在 Java 中 new 一个对象的流程是怎样的?
对象怎么创建,这个太熟悉了,new一下(其实还有很多途径,比如反射.反序列化.clone等,这里拿最简单的new来讲): Dog dog = new Dog(); 我们总是习惯于固定语句的执行,却对于 ...
- 搜索算法(一)--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 ...
- 【数据结构笔记22】图的遍历例题:拯救007(应用DFS)、六度空间(应用BFS)
本次笔记内容: 6.3 应用实例:拯救007 6.4 六度空间 文章目录 拯救007 题目与分析 题目 分析 总体算法 六度空间(Six Degrees of Separation) 题目 算法思路 ...
- 拯救行动(变种bfs)
总时间限制: 10000ms 内存限制: 65536kB 描述 公主被恶人抓走,被关押在牢房的某个地方.牢房用N*M (N, M <= 200)的矩阵来表示.矩阵中的每项可以代表道路(@).墙壁 ...
- BFS 搜索 Problem 1012 Rescue 拯救天使
Problem ID:1012 Rescue 简单题意:给出一个地图,其中有一个"a",代表angle,若干个"r",代表去营救angle的朋友,"x ...
最新文章
- 命令行程序增加 GUI 外壳
- 描述C#多线程中 lock关键字
- 电信设备产品简介材料收集
- 目前,只有IDEA这款神器能把Java8的数据流问题这么完美的解决掉!
- 比特币地址可以查到本人吗_查看每一个地址有多少个比特币
- spring 事件模型_Spring–设计领域模型和服务层
- facet与compiler不匹配
- 2个线程共同处理冒泡排序 Linux 双线程处理
- openai-gpt_GPT-3 101:简介
- 用c语言实现数字时钟课程设计,基于C51单片机的数字时钟课程设计(C语言,带闹钟).doc...
- 渗透测试工具之——WVSS(绿盟web应用漏洞扫描系统)概述
- python找不到解释器_为什么pycharm找不到python解释器
- CSS3技巧:利用css3径向渐变做一张优惠券
- python自动化操作微信_利用Python实现微信半自动化操作!
- 随笔二——班主任工作阶段总结
- 服务器如果清理垃圾文件,为citrix服务器清理垃圾文件事件
- 全程无坑手撸k8s集群
- 炒币经验分享给大家,希望对你们有帮助。
- 四扫客户接口——接口测试完成文档
- Django-应用app名配置中文显示
热门文章
- Map reduce程序----求共同好友
- 轻量级兼顾本地体验,PWA应用到底有多卷?
- 神器 工具 推荐 SRDebugger
- Android studio 音乐播放器
- 牛牛有一棵n个节点的二叉树,该二叉树每个节点的权值为1。牛牛想要删掉该树其中的k层节点,删除序列为a1,a2...ak。 如有一棵二叉树,删除其中的第3层节点
- 用户交互设计经典10个原则
- matlab 绘多图 图名,MATLAB中subplot函数来画多图
- 蔡司数码视疲劳测试软件_数码视疲劳的治疗
- 我心中的计算机作文500,我心中的阳光作文500字4篇
- python定义栈_Python开发中栈的定义及用法详解