ACM算法-逃离机场
逃离机场
题目描述
小明听说机场是一个很肥的地方,所以想跳一波机场,看看到底有多肥。不过机场虽然肥,但是跳的 人也多。小明第一次跳机场,刚跳下来就到处都是枪声,小明吓得快要哭出来了,想逃离机场,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算法-逃离机场相关推荐
- 繁凡的ACM算法全家桶(全新的模板整合计划)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的模板整合计划 ACM算法全家桶的所有内容的 Portable Document Format 版本全部 开 源 啦 !可 ...
- 如何出(改编)一道ACM算法题?
本文背景 本人算法能力一般,但是为省赛和区域赛网络赛出过几道题,总结了一些自己的经验,希望与大家分享.本文不涉及具体的算法题,都是一些理论性的想法和一些建议. 题源 如果你能在没有题源的情况下自己想出 ...
- 【C语言、C++基础编程题】【基础类题集】【平顶山学院ACM算法攻关部】
题源:平顶山学院ACM算法攻关部 目录 前言 1000:A+B Problem 1001:编写一个程序,输出指定信息 1002:求三个数最大值 1003:字符串加密 1004:计算圆柱体的面积体积等 ...
- Problem E. 逃离机场
Problem E. 逃离机场 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) ...
- ACM算法之基础算法
ACM算法基础篇 基础算法有:枚举,递推,贪心,,分治,递归,构造,模拟,排序和检索 1.枚举:也叫穷举,是从问题所有可能解中一一枚举个元素,用题目给的检验条件判定哪些是无用的,那些是有用的,符合的解 ...
- acm算法有用吗?写给自己。
acm算法有用吗?写给自己,也希望能帮助那些大一迷茫的人. 我是一个普通二本院校即将进入大三的acmer,一般问这个问题的人都是一个acmer的失败者,因为成功的人都去忙着学习该学习的算法了,不会问这 ...
- ACM算法训练【逆序对的数量】
ACM算法训练[逆序对的数量] 题目说明 数据范围 样例 分析与代码 题目说明 数据范围 样例 分析与代码 ①归并排序基本思想: ②在归并的过程中,逆序对出现的三种情况: a.全部出现在左边的区间 b ...
- ACM算法训练【模拟队列】
ACM算法训练[模拟队列] 1.题目 2.样例 3.代码 1.题目 2.样例 输入样例: 10 push 6 empty query pop empty push 3 push 4 pop query ...
- 2013 五月份以前的一年半ACM算法生涯
我是大学入学后才开始接触ACM算法的.在2012入学第一学期,我开始学习了第一门程序设计语言,也就是经典的C语言,而我的ACM情缘也是从那时候开始的.那时候的我根本就不知道的什么是ACM,对它也没什么 ...
- 【组队学习】【36期】交大ACM算法课(C++)
交大ACM算法课(C++) 航路开辟者:伯禹教育 领航员:吕豪杰.叶前坤.孙博腾.何锋丽.张腾飞.韩可航.韩江雪 航海士:赵子一.于沼懿.陈伟峰.孙昌慧.李小山.汪超.李牧轩.江玲新.孙超.吴昌广.光 ...
最新文章
- EnterLib PIAB又一个BUG?
- C语言嵌入式系统编程修炼之(六)性能优化
- Python入门100题 | 第022题
- diy gps for mio 686
- XenCenter创建VM过程
- 世界主要国家地区英文名称,缩写代码
- php操作剪贴板内容代码,查看剪贴板内容的方法
- Oracle中的数据类型---NUMBER
- 几种常见的十进制代码(笔记)
- JQuery学习04篇(层次选择器)
- 五险一金 | 养老保险的认识
- QT 使用QZXing生成,解析二维码跟条码
- **阿里云ECS Linux服务器图形化界面安装方法 Ubuntu**
- 叶新伟 php,基于php+mysql技术bbs论坛设计的开发与实现最终版(样例3)
- 老雷PHP教程,老雷socket編程之PHP利用socket擴展實現聊天服務
- commonjs 和esm
- typescript光速入门
- 迅雷VIP尊享版系列
- 哪些你不知道的神回复?
- bfo java_Java操作PDF文件(BFO)