题目描述

机场是一个很肥的地方,所以想跳一波机场,看看到底有多肥。不过机场虽然肥,但是跳的人也多。小明第一次跳机场,刚跳下来就到处都是枪声,小明吓得快要哭出来了,想逃离机场,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!

解题思路

200*200的数据量优先考虑广搜,注意初始化敌人攻击路径标记为无后序性,注意多组输入

AC代码

萌新记录成长,大佬勿喷
#include <bits/stdc++.h>
using namespace std;
const int maxn=205;
char mp[maxn][maxn];
bool book[maxn][maxn];
int n,m;
int dir[4][2]={1,0,-1,0,0,1,0,-1};
struct cp{int x,y;}emp[maxn*maxn];//敌人数组
struct stu{int x,y,t;stu(int xx,int yy,int tt):x(xx),y(yy),t(tt){}};//广搜队列
int bfs(int si,int sj)
{queue <stu> myq;book[si][sj]=1;myq.push(stu(si,sj,0));while(!myq.empty()){stu temp=myq.front();for(int i=0;i<4;i++){int tx=temp.x+dir[i][0];int ty=temp.y+dir[i][1];if(tx<0||tx>=n||ty<0||ty>=m){return temp.t;}if(mp[tx][ty]=='x'||book[tx][ty]==1){continue;}book[tx][ty]=1;myq.push(stu(tx,ty,temp.t+1));}myq.pop();}return -1;
}
bool start_die(int x,int y)//判断是否落地成盒
{for(int i=x+1;i<n;i++)if(mp[i][y]=='o')return true;else if(mp[i][y]=='x')break;for(int i=x-1;i>=0;i--)if(mp[i][y]=='o')return true;else if(mp[i][y]=='x')break;for(int i=y+1;i<m;i++)if(mp[x][i]=='o')return true;else if(mp[x][i]=='x')break;for(int i=y-1;i>=0;i--)if(mp[x][i]=='o')return true;else if(mp[x][i]=='x')break;return false;
}
void init(int x,int y)//将敌人射程都变成走过的路
{book[x][y]=1;for(int i=x+1;i<n;i++)if(mp[i][y]=='x')break;else book[i][y]=1;for(int i=x-1;i>=0;i--)if(mp[i][y]=='x')break;else book[i][y]=1;for(int i=y+1;i<m;i++)if(mp[x][i]=='x')break;else book[x][i]=1;for(int i=y-1;i>=0;i--)if(mp[x][i]=='x')break;else book[x][i]=1;
}
int main()
{int T;while(cin>>T){while(T--){cin>>n>>m;int si,sj;int k=0;for(int i=0;i<n;i++)for(int j=0;j<m;j++){cin>>mp[i][j];if(mp[i][j]=='@')//取出生地为si,sj{si=i;sj=j;}if(mp[i][j]=='o'){emp[k].x=i;emp[k].y=j;k++;}}if(start_die(si,sj))//判断是否落地成盒{cout<<"no zuo no die!"<<endl;}else{memset(book,0,sizeof(book));for(int i=0;i<k;i++)//将敌人的攻击范围设置为走过的路{init(emp[i].x,emp[i].y);}int ans=bfs(si,sj);//广搜if(ans==-1){cout<<"no zuo no die!"<<endl;}elsecout<<ans+1<<endl;}}}return 0;
}

BTTCOJ 问题 C: 逃离机场 广度优先搜索相关推荐

  1. 使用广度优先搜索找到最短路径

    by Sachin Malhotra 由Sachin Malhotra 使用广度优先搜索找到最短路径 (Finding Shortest Paths using Breadth First Searc ...

  2. [C] 层层递进——C语言实现广度优先搜索

    以防万一有人想不开要做染色的题呢?比如我. 广度优先搜索 如何实现一个广度优先搜索 广搜(bfs)是一个层层递进的概念,与深搜的不撞南墙不回头不同,广搜更像一个感染的过程,一个点只能感染到它周边的点. ...

  3. python扫雷 广度优先_Leetcode之广度优先搜索(BFS)专题-529. 扫雷游戏(Minesweeper)...

    Leetcode之广度优先搜索(BFS)专题-529. 扫雷游戏(Minesweeper) BFS入门详解:Leetcode之广度优先搜索(BFS)专题-429. N叉树的层序遍历(N-ary Tre ...

  4. 初识广度优先搜索与解题套路

    作者 | P.yh 来源 | 五分钟学算法 初识广度优先搜索 在讲解广度优先搜索之前,我们来看看几个常见的数据结构,链表.树.图. 先来看看其中比较简单的数据结构 - 链表,它和数组类似,也是一个线性 ...

  5. matlab bfs函数,matlab练习程序(广度优先搜索BFS、深度优先搜索DFS)

    如此经典的算法竟一直没有单独的实现过,真是遗憾啊. 广度优先搜索在过去实现的二值图像连通区域标记和prim最小生成树算法时已经无意识的用到了,深度优先搜索倒是没用过. 这次单独的将两个算法实现出来,因 ...

  6. networkx 有向图强连通_leetcode刷题(四):搜索(深度优先搜索,广度优先搜索)拓扑排序,强连通分量...

    在开始今天的话题之前,我们先了解一个概念,什么是图的遍历? 图的遍历就是从图中某一点出发访遍图中其余剩余定点,且每个顶点仅被访问一次,这个过程叫做图的遍历. 图的遍历主要被分为深度优先遍历和广度优先遍 ...

  7. LeetCode-笔记-199. 二叉树的右视图——BFS广度优先搜索

    LeetCode-笔记-199. 二叉树的右视图 199. 二叉树的右视图 给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值. 示例: 输入: [1,2,3,n ...

  8. 根据邻接表求深度优先搜索和广度优先搜索_深度优先搜索/广度优先搜索与java的实现...

    度:某个顶点的度就是依附于该顶点的边的个数 子图:一幅图中所有边(包含依附边的顶点)的子集 路径:是由边顺序连接的一系列定点组成 环:至少含有一条边且终点和起点相同的路径 连通图:如果图中任一个到另一 ...

  9. 图的遍历——广度优先搜索(Breadth First Search)

    2019独角兽企业重金招聘Python工程师标准>>> 1.广度优先搜索遍历类似于树的按层次遍历的过程. 假设从图中某顶点V出发,在访问了V之后依次访问V的各个未曾访问过得邻接点,然 ...

  10. 地牢逃脱(BFS(广度优先搜索))

    题目描述 给定一个 n 行 m 列的地牢,其中 '.' 表示可以通行的位置,'X' 表示不可通行的障碍,牛牛从 (x0 , y0 ) 位置出发,遍历这个地牢,和一般的游戏所不同的是,他每一步只能按照一 ...

最新文章

  1. 工业相机和镜头说明与图像采集
  2. ios开发多线程篇--异步加载网络图片GCD
  3. 判断session失效,并跳转到登录页面
  4. 错误 undefined reference to __cxa_guard_acquire/release
  5. HDOJ1018 ( Big Number ) 【斯特林公式---处理阶乘及阶乘位数的问题】
  6. CSDN账号被冻结了怎么办
  7. 科目三考试技巧全总结
  8. spring html导出excel文件,Spring 导出 Excel-Fun言
  9. 测试计算机的运行速度
  10. 高考加油别学计算机图片,高考加油励志说说带图片,2020高考加油说说配图
  11. YII2调用天翼云OOS 对象存储服务
  12. 资深工程师PCB经验介绍
  13. 小心肝队-冲刺日志(第十天)
  14. 连续七年 领跑未来丨山石网科入选Gartner 2020网络防火墙魔力象限
  15. 微信Android热更新Tinker使用详解(by 星空武哥)
  16. 阿里云个人账户如何变更为企业用户
  17. FineReport报表工具激活码
  18. uni-app中,文字超出隐藏并显示省略号(实现展开、收起全文)
  19. 移动互联网四个特点:移动性、私密性、局限性、强关联性
  20. time(),date(),microtime()…

热门文章

  1. unity项目 别踩白块儿
  2. win10找不到wifi网络_笔记本电脑搜索不到自己家wifi怎么回事?无线网络信号的解决方法...
  3. 测试初中英语词汇量软件,背单词最好的软件排名【浅析初中英语单词拼写】
  4. WEX5导出excel
  5. 2019年会总结+自我反思
  6. 玩家访问网站自动弹窗加QQ群方法以及详细代码
  7. 2021年7月20日我国暴雨趋势遥感监测与评估
  8. 仿真 steam linux 安装教程,Ubuntu安装Steam游戏平台的解决方案
  9. 立创EDA能代替传统的PCB设计软件么?比如AD、protel等?可以
  10. Footprint:Polkadot创立至今,生态如何?