逃离机场

题目描述
小明听说机场是一个很肥的地方,所以想跳一波机场,看看到底有多肥。不过机场虽然肥,但是跳的 人也多。小明第一次跳机场,刚跳下来就到处都是枪声,小明吓得快要哭出来了,想逃离机场,emmm, 还是打野比较适合他。
现在把机场看作一个二维平面,’.’ 代表可以走的空地,’@’ 代表小明当前的位置,’x’ 代表这里是个 障碍物,’o’ 代表这里有个敌人,并且手里有枪,敌人可以攻击上下左右四个方向,小明只要走到或者一 开始就在敌人可以攻击的位置,就会死亡(机场个个都是 98K 爆头 dalao),子弹不会穿过障碍物,敌人 不会移动。小明只能往上下左右走,每走一步需要 1 秒,只要小明移动到机场的边缘再走一步就算逃离 了机场,现在小明请你帮他找一条最快逃离机场的线路,输出这个时间,如果怎么都逃不出去,输出”no zuo no die!”(不含引号)。
输入格式
多组测试数据,首先第一行一个整数 T,代表测试数据组数。1 ≤ T ≤ 100。
每组测试数据有 n, m(1 ≤ n, m ≤ 200),代表机场是一个 n × m 的方阵,接下来是一个由’.’,’@’,’x’, ’o’ 构成的 n × m 的方阵,’@’ 只有一个。
输出格式
对于每组数据输出一个数代表最快需要多少时间逃出机场,或者”no zuo no die!”。
输入样例
3
5 5
.x.x.
.x.x.

…@…
.o.o.
3 3
@…
xxx
o.x
3 3
o.o
.@.
.x.
输出样例
4
1
no zuo no die!

首先分析题目,很明显是一道搜索题目,并且是一道不确定出口的搜索题目,当小明只要走出迷宫就可以,就是说只要搜索到可以走出地图就可以,因为找的是最短路径,所以使用BFS广度搜索寻找最短路径,DFS找出口的话不一定是最短。
题目有坑不好好理解题意的话是肯定有数据是不过不去的。狙击手会四个方向开枪,意思是狙击手所在位置的四个方向直到障碍物都是不可以走的,或者说,给你的地图就是人已经在狙击手的抢线上了,就是说人上来就已经被打死了,一步都走不了。这就是最坑的地方,所以在输入数据之后就要预处理一下,然后在进行BFS搜索。把狙击手的四个枪线初始化,如果遇到障碍物子弹无法穿过,狙击手到障碍物之间的路径是不可以走的。预处理之后找到人并且人还是活着的,然后BFS找最短的出口,活着并且逃出去才可以,人死了或找不到出口都是不可以的,只能输出no zuo no die!

#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
int t,sx,sy,n,m,alive,out;
char mat[205][205];
int book[205][205];
int dir[][2] = {-1,0,0,1,1,0,0,-1};
struct node{int x,y,s;
};
void mark(int x,int y){book[x][y] = 1;for(int i=0;i<4;i++){int tx = x;int ty = y;while(1){tx = tx + dir[i][0];ty = ty + dir[i][1];if(tx < 0 || tx >= n || ty < 0 || ty >= m || mat[tx][ty] == 'x')break;if(mat[tx][ty] == '.' || mat[tx][ty] == '@')book[tx][ty] = 3;}}
}
int bfs(int x,int y){node front,tail;queue<node> q;front.x = x;front.y = y;front.s = 0;q.push(front);while(!q.empty()){front = q.front();q.pop();for(int i=0;i<4;i++){int tx = front.x + dir[i][0];int ty = front.y + dir[i][1];if(tx < 0 || tx >=n || ty < 0 || ty >= m){out = 1;return front.s+1;}if(mat[tx][ty] == '.' && book[tx][ty] == 0){tail.x = tx;tail.y = ty;tail.s = front.s+1;book[tx][ty] = 1;q.push(tail);}}}return 0;
}
int main(){cin>>t;while(t--){alive = out = 0;cin>>n>>m;memset(book,0,sizeof book);for(int i=0;i<n;i++){cin>>mat[i];}for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(mat[i][j] == 'x')book[i][j] = 2;if(mat[i][j] == 'o')mark(i,j);}}for(int i=0;i<n;i++)for(int j=0;j<m;j++)if(mat[i][j] == '@' && book[i][j] == 0){sx = i;sy = j;book[i][j] = 1;alive = 1;}
//      for(int i=0;i<n;i++){//          for(int j=0;j<m;j++)
//              cout<<book[i][j];
//          cout<<endl;
//      }int step = bfs(sx,sy);if(alive && out)cout<<step<<endl;if(!alive || !out)cout<<"no zuo no die!"<<endl;}return 0;
}

ACM算法-逃离机场相关推荐

  1. 繁凡的ACM算法全家桶(全新的模板整合计划)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的模板整合计划 ACM算法全家桶的所有内容的 Portable Document Format 版本全部 开 源 啦 !可 ...

  2. 如何出(改编)一道ACM算法题?

    本文背景 本人算法能力一般,但是为省赛和区域赛网络赛出过几道题,总结了一些自己的经验,希望与大家分享.本文不涉及具体的算法题,都是一些理论性的想法和一些建议. 题源 如果你能在没有题源的情况下自己想出 ...

  3. 【C语言、C++基础编程题】【基础类题集】【平顶山学院ACM算法攻关部】

    题源:平顶山学院ACM算法攻关部 目录 前言 1000:A+B Problem 1001:编写一个程序,输出指定信息 1002:求三个数最大值 1003:字符串加密 1004:计算圆柱体的面积体积等 ...

  4. Problem E. 逃离机场

    Problem E. 逃离机场 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) ...

  5. ACM算法之基础算法

    ACM算法基础篇 基础算法有:枚举,递推,贪心,,分治,递归,构造,模拟,排序和检索 1.枚举:也叫穷举,是从问题所有可能解中一一枚举个元素,用题目给的检验条件判定哪些是无用的,那些是有用的,符合的解 ...

  6. acm算法有用吗?写给自己。

    acm算法有用吗?写给自己,也希望能帮助那些大一迷茫的人. 我是一个普通二本院校即将进入大三的acmer,一般问这个问题的人都是一个acmer的失败者,因为成功的人都去忙着学习该学习的算法了,不会问这 ...

  7. ACM算法训练【逆序对的数量】

    ACM算法训练[逆序对的数量] 题目说明 数据范围 样例 分析与代码 题目说明 数据范围 样例 分析与代码 ①归并排序基本思想: ②在归并的过程中,逆序对出现的三种情况: a.全部出现在左边的区间 b ...

  8. ACM算法训练【模拟队列】

    ACM算法训练[模拟队列] 1.题目 2.样例 3.代码 1.题目 2.样例 输入样例: 10 push 6 empty query pop empty push 3 push 4 pop query ...

  9. 2013 五月份以前的一年半ACM算法生涯

    我是大学入学后才开始接触ACM算法的.在2012入学第一学期,我开始学习了第一门程序设计语言,也就是经典的C语言,而我的ACM情缘也是从那时候开始的.那时候的我根本就不知道的什么是ACM,对它也没什么 ...

  10. 【组队学习】【36期】交大ACM算法课(C++)

    交大ACM算法课(C++) 航路开辟者:伯禹教育 领航员:吕豪杰.叶前坤.孙博腾.何锋丽.张腾飞.韩可航.韩江雪 航海士:赵子一.于沼懿.陈伟峰.孙昌慧.李小山.汪超.李牧轩.江玲新.孙超.吴昌广.光 ...

最新文章

  1. EnterLib PIAB又一个BUG?
  2. C语言嵌入式系统编程修炼之(六)性能优化
  3. Python入门100题 | 第022题
  4. diy gps for mio 686
  5. XenCenter创建VM过程
  6. 世界主要国家地区英文名称,缩写代码
  7. php操作剪贴板内容代码,查看剪贴板内容的方法
  8. Oracle中的数据类型---NUMBER
  9. 几种常见的十进制代码(笔记)
  10. JQuery学习04篇(层次选择器)
  11. 五险一金 | 养老保险的认识
  12. QT 使用QZXing生成,解析二维码跟条码
  13. **阿里云ECS Linux服务器图形化界面安装方法 Ubuntu**
  14. 叶新伟 php,基于php+mysql技术bbs论坛设计的开发与实现最终版(样例3)
  15. 老雷PHP教程,老雷socket編程之PHP利用socket擴展實現聊天服務
  16. commonjs 和esm
  17. typescript光速入门
  18. 迅雷VIP尊享版系列
  19. 哪些你不知道的神回复?
  20. bfo java_Java操作PDF文件(BFO)

热门文章

  1. 如何用JavaScript实现轮播图(幻灯片)的制作
  2. 提取小米主题内部的桌面锁屏壁纸图片步骤
  3. 怎样才算精通javascript
  4. 如何安装Virtual Box的VBox Guest Additions扩展程序
  5. talentcentral测评结果_校招的时候性格测试直接跪了,到底是怎么个机制?
  6. WEB前端性能优化总结——如何提高网页加载速度
  7. matlab 2ask原理,基于Matlab对2ASK调制解调及其仿真设计
  8. 【php基础入门】细说php的变量以及常量的知识点详解
  9. 高斯计工作原理和高斯计使用方法图解
  10. 翻译:web制作、开发人员需知的Web缓存知识