链接:https://ac.nowcoder.com/acm/contest/301/G
来源:牛客网

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

小乐乐觉得学习太简单了,剩下那么多的时间好无聊,于是便想打游戏。
最近新出了一个特别火的游戏,叫吃猪,小乐乐准备玩一玩。
吃猪游戏很简单,给定一个地图,大小为n*m,在地图中会随机出现一个火山口,只要小乐乐能逃离这个地图,他便能吃猪! 
但吃鸡远没有那么简单:
  1.小乐乐每走一次只能上下左右四个方向中走一步。
  2.小乐乐每走一步,火山喷发的岩浆就会向四周蔓延一个格子,所有岩浆走过的地方都视为被岩浆覆盖。
  3.小乐乐碰到岩浆就会死。
  4.地图中还有很多障碍,使得小乐乐不能到达,但是岩浆却可以把障碍融化。
  5.小乐乐只有走到题目给定的终点才算游戏胜利,才能吃猪。
小乐乐哪见过这场面,当场就蒙了,就想请帮帮他,告诉他是否能吃猪。

输入描述:

多组样例输入第一行给定n,m,(1 <= n, m <= 1000)代表地图的大小。接下来n行,每一行m个字符,代表地图,对于每一个字符,如果是'.',代表是平地,'S'代表小乐乐起始的位置,
'E'代表终点,'#'代表障碍物,'F'代表火山口。

输出描述:

输出只有一行。如果小乐乐能吃猪,输出"PIG PIG PIG!"。否则输出"A! WO SI LA!"。

输入

3 3
F..
#S#
#.E

输出

PIG PIG PIG!

解题思路

这道题其实就是让你判断一下岩浆和小乐乐谁先到达终点。直接用BFS搜索一下就行了,只要岩浆到终点的距离小于小乐乐到终点的距离,那么小乐乐肯定是到不了的。注意一下岩浆的距离是怎样求的。

#include <queue>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int N = 1005;
const int inf = 99999999;
int n, m, ex, ey, len;
int map[N][N], vis[N][N];
int nex[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
struct edge {int u, v, flag;
}t;
int BFS(int u, int v) {vis[u][v] = 1;queue <edge> Q;Q.push((edge){u, v, 0});while (!Q.empty()) {t = Q.front();Q.pop();for (int i = 0; i < 4; i++) {int tx = t.u + nex[i][0];int ty = t.v + nex[i][1];if (t.flag + 1 > len)return inf;if (tx == ex && ty == ey)return t.flag + 1;if (tx < 0 || tx >= n || ty < 0 || ty >= m)continue;if (map[tx][ty] && !vis[tx][ty]) {vis[tx][ty] = 1;Q.push((edge){tx, ty, t.flag + 1});}}}return inf;
}
int main() {char s[N];int ans, sx, sy, px, py;while (~scanf("%d%d", &n, &m)) {memset(vis, 0, sizeof(vis));for (int i = 0; i < n; i++) {scanf("%s", s);for (int j = 0; j < m; j++) {if (s[j] != '#') {map[i][j] = 1;switch (s[j]) {case 'S': sx = i; sy = j; break;case 'E': ex = i; ey = j; break;case 'F': px = i; py = j; break;}}else map[i][j] = 0;}}len = abs(px - ex) + abs(py - ey);ans = BFS(sx, sy);if (ans <= len)printf("PIG PIG PIG!\n");else printf("A! WO SI LA!\n");}return 0;
}

牛客网 - 小乐乐打游戏(BFS)相关推荐

  1. 牛客网-小周的曲射炮

    牛客网-小周的曲射炮(公式推导) 题目描述 小周最近在玩一款二战游戏,他因而对曲射炮的轨迹产生了很大的兴趣,但是在尝试计算后,小周发现这个问题并不是那么简单,他因而来请教你这位计算机高手,请你来帮帮他 ...

  2. 牛客网小bai月赛40

    牛客网小白月赛40 A 数字游戏 B 跳跳跳 D 优美字符串 E 分组 F 过桥 G 空调遥控 I 体操队形 牛客比赛页面跳转 这是一篇菜鸟的自我总结,大佬勿喷,轻点轻点~ A 数字游戏 题目意思: ...

  3. 牛客网挑战赛24 青蛙(BFS)

    链接:https://www.nowcoder.com/acm/contest/157/E 来源:牛客网 有一只可爱的老青蛙,在路的另一端发现了一个黑的东西,想过去一探究竟.于是便开始踏上了旅途 一直 ...

  4. 牛客网 小睿睿的方案 解题报告

    小睿睿的方案 链接: https://ac.nowcoder.com/acm/contest/371/C 来源:牛客网 题目描述 小睿睿虽然已经是人生赢家了,但当他看见学校里其他人秀恩爱时仍旧会十分不 ...

  5. 牛客网小白二(2018.4.21)

    需要加强的内容:1.递归(尼姆堆) 2.字符与字符串的输入输出,有关其求长度或个数的的函数.语法等 3.有向图.无向图.树的遍历 一.数字方阵 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/ ...

  6. 牛客网 小A买彩票 (dp)

    题目链接:点此跳转 题目大意: 小A最近开始沉迷买彩票,并且希望能够通过买彩票发家致富.已知购买一张彩票需要3元,而彩票中奖的金额分别为1,2,3,4元,并且比较独特的是这个彩票中奖的各种金额都是等可 ...

  7. 牛客网. 龙与地下城游戏

    题目概述 解题思路 这道题看上去要用动态规划处理.动归的一个关键在于构造最优子问题(也就是写递推公式).对于这种矩阵形式的动态规划,另一个关键(也是我之前选择性忽略的)就是确定动态规划的方向(其实是在 ...

  8. 【牛客 - 188C】水图(bfs树的直径,思维)

    题干: 链接:https://ac.nowcoder.com/acm/contest/188/C 来源:牛客网 小w不会离散数学,所以她van的图论游戏是送分的 小w有一张n个点n-1条边的无向联通图 ...

  9. 牛客网获取输入rowinput_Python爬虫入门例题:抓取牛客网题目

    最近做题的时候要写一些题解,在把牛客网的题目复制下来的时候,数学公式的处理比较麻烦,所以我用Python的selenium.urllib.request和BeautifulSoup4库对题目信息进行了 ...

最新文章

  1. 看完陈皓的116篇文章,我给自己定了个5年技术规划
  2. 基于nginx环境部署nagios
  3. 带有JAX-RS和PrimeFaces的RESTful图表
  4. 工业POE交换机使用中的常见问题汇总
  5. java 获取方法_Java 反射理解(三)-- Java获取方法信息
  6. css3滚动倾斜,jQuery 3D倾斜滚动页面效果
  7. 程序员面试金典——9.4集合的子集
  8. 机器学习作业班_python实现逻辑回归多类分类
  9. word 产生很多temp 不显示_Word与PPT互转,怎样才能30秒内搞定?教程来了
  10. python用matplotlib画雷达图_Matplotlib绘制雷达图和三维图的示例代码
  11. 基于Objective-C的iOS开发--入门篇
  12. C# MessageBox用法实例
  13. java txt导出_Java导出txt文件的方法
  14. DataFrame的ix方法
  15. Python开发资源速查表
  16. 学习matlab体会,matlab学习心得体会
  17. linux shutdown关不了机
  18. PS出现“不能完成存储为命令,因为没有足够的内存RAM” 设置性能时“要求96和8之间的整数。已插入最接近的数值”
  19. Redis分布式算法原理(重点)
  20. c9和北航计算机哪个好,哈工大是C9高校,北航是普通的985,为何北航的录取分数更高?...

热门文章

  1. Android攻城狮datePicketimePicker
  2. Opencv3基础操作3——图像形态学处理
  3. 《圣经》中最让人感动的十句话(转)
  4. python 数据结构 list(3)
  5. 浅析为什么没有朝代在武汉建都?
  6. 席慕容《写给幸福》读记
  7. 如何在线制作gif图片?
  8. word模板中添加图片
  9. 大话深度信念网络(DBN)
  10. 令人敬畏的泰格伍兹 万维钢_令人敬畏的桌面壁纸:Windows 7版