时间限制:C/C++ 1秒,其他语言2秒

空间限制:C/C++ 32768K,其他语言65536K

64bit IO Format: %lld

题目描述

小乐乐觉得学习太简单了,剩下那么多的时间好无聊,于是便想打游戏。

        最近新出了一个特别火的游戏,叫吃猪,小乐乐准备玩一玩。

        吃猪游戏很简单,给定一个地图,大小为n*m,在地图中会随机出现一个火山口,只要小乐乐能逃离这个地图,他便能吃猪! 

        但吃鸡远没有那么简单:

        1.小乐乐每走一次只能上下左右四个方向中走一步。

        2.小乐乐每走一步,火山喷发的岩浆就会向四周蔓延一个格子,所有岩浆走过的地方都视为被岩浆覆盖。

        3.小乐乐碰到岩浆就会死。

        4.地图中还有很多障碍,使得小乐乐不能到达,但是岩浆却可以把障碍融化。

        5.小乐乐只有走到题目给定的终点才算游戏胜利,才能吃猪。

        小乐乐哪见过这场面,当场就蒙了,就想请帮帮他,告诉他是否能吃猪。

输入描述:

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

输出描述:

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

示例1

输入

复制

  1. 3 3
  2. F..
  3. #S#
  4. #.E

输出

复制

  1. PIG PIG PIG!

代码:

  1. #include <cstdlib>
  2. #include <cstdio>
  3. #include <iostream>
  4. #include <cstring>
  5. #include <queue>
  6. using namespace std;
  7. int read()
  8. {
  9. int x=0,f=1;char ch=getchar();
  10. while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
  11. while(ch>='0'&&ch<='9'){x=x*10+ch-48,ch=getchar();}
  12. return x*f;
  13. }
  14. const int maxn = 1010;
  15. char s[maxn][maxn];
  16. struct edge{
  17. int to,next;
  18. }e[maxn*maxn*2];
  19. int tot,head[maxn*maxn];
  20. void add(int u,int v){
  21. e[++tot].to=v;
  22. e[tot].next=head[u];
  23. head[u]=tot;
  24. }
  25. int dis[maxn*maxn],num[maxn][maxn],S,T,Fx,Fy;
  26. int tim[maxn*maxn];
  27. int dx[]={0,1,-1,0,0};
  28. int dy[]={0,0,0,1,-1};
  29. int main()
  30. {
  31. int n,m,cnt=0;
  32. while(scanf("%d%d",&n,&m)!=EOF){
  33. cnt=0,tot=0;
  34. memset(head,0,sizeof head);
  35. for(int i=1;i<=n;i++){
  36. scanf("%s",s[i]+1);
  37. for(int j=1;j<=m;j++){
  38. num[i][j]=++cnt;
  39. if(s[i][j]=='S') S=cnt;
  40. if(s[i][j]=='E') T=cnt;
  41. if(s[i][j]=='F') Fx=i,Fy=j;
  42. }
  43. }
  44. for(int i=1;i<=n;i++){
  45. for(int j=1;j<=m;j++){
  46. tim[num[i][j]]=abs(Fx-i)+abs(Fy-j);
  47. if(s[i][j]=='#')continue;
  48. for(int k=1;k<=4;k++){
  49. int x=i+dx[k],y=j+dy[k];
  50. if(x<=0||y<=0||x>n||y>m||s[x][y]=='#')continue;
  51. add(num[i][j],num[x][y]);
  52. }
  53. }
  54. }
  55. queue<int>q;
  56. memset(dis,0x3f,sizeof dis);
  57. q.push(S);dis[S]=0;
  58. while(!q.empty()){
  59. int x=q.front();q.pop();
  60. for(int i=head[x];i;i=e[i].next){
  61. int to=e[i].to;
  62. if(dis[x]+1>=tim[to]) continue;
  63. if(dis[to]>dis[x]+1){
  64. q.push(to);dis[to]=dis[x]+1;
  65. }
  66. }
  67. }
  68. if(dis[T]==0x3f3f3f3f) printf("A! WO SI LA!\n");
  69. else printf("PIG PIG PIG!\n");
  70. }
  71. }

小乐乐打游戏(BFS+曼哈顿距离)的更多相关文章

  1. HDU3085(双向BFS+曼哈顿距离)题解

    Nightmare Ⅱ Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  2. HDU3085 Nightmare Ⅱ —— 双向BFS + 曼哈顿距离

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3085 Nightmare Ⅱ Time Limit: 2000/1000 MS (Java/Other ...

  3. 剑指Offer——网易笔试之解救小易——曼哈顿距离的典型应用

    剑指Offer--网易笔试之解救小易--曼哈顿距离的典型应用 前言 首先介绍一下曼哈顿,曼哈顿是一个极为繁华的街区,高楼林立,街道纵横,从A地点到达B地点没有直线路径,必须绕道,而且至少要经C地点,走 ...

  4. P4554 小明的游戏 (洛谷) 双端队列BFS

    最近没有更新博客,全是因为英语,英语太难了QWQ 洛谷春令营的作业我也不会(我是弱鸡),随机跳了2个题,难度不高,还是讲讲吧,学学新算法也好(可以拿来水博客) 第一题就是这个小明的游戏 小明最近喜欢玩 ...

  5. 15 Puzzle (4乘4谜题) IDA*(DFS策略与曼哈顿距离启发) 的C语言实现

    大家好!这是我的第一篇博客,由于之前没有撰写博客的经验,并且也是初入计算机和人工智能领域,可能有些表述或者理解不当,还请大家多多指教. 一.撰写目的 由于这个学期在上算法与数据结构课程的时候,其中一个 ...

  6. Atitti knn实现的具体四个距离算法 欧氏距离、余弦距离、汉明距离、曼哈顿距离

    Atitti knn实现的具体四个距离算法  欧氏距离.余弦距离.汉明距离.曼哈顿距离 1. Knn算法实质就是相似度的关系1 1.1. 文本相似度计算在信息检索.数据挖掘.机器翻译.文档复制检测等领 ...

  7. 6、Cocos2dx 3.0游戏开发找小三之游戏的基本概念

    重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27689713 郝萌主友情提示: 人是习惯的产物,当你 ...

  8. BZOJ - 3170: 松鼠聚会 (切比雪夫转曼哈顿距离)

    pro:  有N个小松鼠,它们的家用一个点x,y表示,两个点的距离定义为:点(x,y)和它周围的8个点即上下左右四个点和对角的四个点,距离为1.现在N个松鼠要走到一个松鼠家去,求走过的最短距离.0&l ...

  9. BZOJ 3170 松鼠聚会(切比雪夫距离转曼哈顿距离)

    题意 有N个小松鼠,它们的家用一个点x,y表示,两个点的距离定义为:点(x,y)和它周围的8个点即上下左右四个点和对角的四个点,距离为1.现在N个松鼠要走到一个松鼠家去,求走过的最短距离. 思路 题目 ...

随机推荐

  1. JAVA基础知识总结14(String、StringBuffer、StringBuilder)

    1.String字符串: java中用String类进行描述.对字符串进行了对象的封装.这样的好处是可以对字符串这种常见数据进行方便的操作.对象封装后,可以定义N多属性和行为. 如何定义字符串对象呢? ...

  2. php命令行操作

    1.php -v返回版本 -i选项返回安装的有关信息 -h访问帮助文件 -m列出编译到当前PHP安装的全部模块   CLI与CGI区别: 在命令行脚本环境中,有两种版本的PHP可以使用,旧版本是CGI ...

  3. Ros学习——launch文件解析

    launch文件的重点是:节点(node)元素的集合. roslaunch 则是让所有的节点共享同一个终端. 1.标签(元素)说明 1. group标签 2. node标签 <group ns= ...

  4. Inheritance with EF Code First: Part 3 – Table per Concrete Type (TPC)

    Inheritance with EF Code First: Part 3 – Table per Concrete Type (TPC) This is the third (and last) ...

  5. Postman工具---请求与响应

    参考:http://blog.csdn.net/water_0815/article/details/53311561

  6. Eclipse报错could not write metadata for '/remotesystemstempfiles'

    1. windows-Preferences  中,在search中输入remote,取消选中reopen remote systems view to previous state'. 2. win ...

  7. ListBox 光标如何定位在最后一行 显示

    richTextBox_show.SelectionStart = richTextBox_show.Text.Length - 1; richTextBox_show.Focus();

  8. [译]在Javascript中进行日期相关的操作

    本文翻译youtube上的up主kudvenkat的javascript tutorial播放单 源地址在此: https://www.youtube.com/watch?v=PMsVM7rjupU& ...

  9. MacBook Pro (13 英寸, 2017 年)安装win10系统

    准备: windows10系统镜像 16G或更大容量U盘(存放驱动,必须格式化为FAT) 官方提供的驱动软件 详细步骤: 1.打开Bootcamp,选择镜像文件 2.点击下一步,选择Bootcamp分 ...

  10. [转]JSP中的编码设置

    转至:http://blog.csdn.net/XinVSYuan/article/details/3864853 1. pageEncoding:<%@ page pageEncoding=& ...