Description

旅行者和班尼特一起进入了迷宫冒险,但是由于班尼特的不幸体制,迷宫里发生了大火!

迷宫可以看作是一个二维的地图,范围是n * m (1<=n,m<=50)
初始时旅行者和班尼特在迷宫的点(x,y)位置上
迷宫的出口坐标为(ex,ey)
迷宫的墙的坐标为(ai,bi)
大火的起源为(fx,fy)
大火每秒会向周围八个方向扩散(上下左右、左上、右上、左下、右下)
旅行者和班尼特每秒可以选择一个方向移动一格(上、下、左、右)
对于任意秒数,旅行者和班尼特先移动,而后大火进行扩散。大火可以烧毁墙壁,旅行者和班尼特不能试图踏入大火所在的区域。
如果旅行者和班尼特能逃出迷宫,输出最短逃脱时间,如果不能,输出T_T

Input
第一行输入一个整数t,表示一共的测试数据组数。
对于每个测试用例,输入两个整数n,m,表示迷宫的大小。
接下来是六个整数x,y,ex,ey,fx,fy (1<=x,ex,fx<=n,1<=y,ey,fy<=m)
接下来一个整数k,表示有k堵墙。(0<=k<=n*m)

然后是k行整数ai,bi,表是在(ai,bi)的位置上有一堵墙。(1<=ai<=n,1<=bi<=m)

Output

t行字符,问题的答案

末尾有换行

Sample Input
2
5 5
3 3 4 4 1 1
1
3 4
5 5
2 4 4 5 1 5
5
1 4
2 3
2 5
3 4
3 5
Sample Output
2
T_T

我的思路是开一个数组,存储障碍,再开一个数组用dfs将每一个火扩散到每一个位置的时间记录下来,然后再开一个记录自己时间的数组,然后进行dfs,如果不是障碍,不越界,并且自己的时间小于火到的时间,那么就放进去,如果能到那个位置,就输出,否则输出t—t,但是注意这里有一个特判,不难但是很容易漏掉,如果你到达终点,那么你的时间和火的时间重合也是没问题的

#include <iostream>
#include <queue>
#include <algorithm>
#include <cstring>using namespace std;constexpr int N=35;int t,n,m,x,y,ex,ey,fx,fy,k,ai,bi;
int za[N][N],huo[N][N],temp1[N][N],sum[N][N],temp3[N][N];
int dx[8]={1,0,0,-1,1,1,-1,-1},dy[8]={0,1,-1,0,1,-1,1,-1};int bfs1(int x,int y){queue<pair<int,int >>q;q.push(make_pair(x,y));temp1[x][y]=1;while(!q.empty()){auto z=q.front();q.pop();for(int i=0;i<8;i++ ){int xx=z.first+dx[i],yy=z.second+dy[i];if(xx>=1&&y>=1&&xx<=n&&yy<=m&&temp1[xx][yy]==0){temp1[xx][yy]=1;huo[xx][yy]=huo[z.first][z.second]+1;q.push(make_pair(xx,yy));}}}
}
void bfs2(int a1,int b1){queue<pair<int,int >>que;que.push(make_pair(a1,b1));temp3[a1][b1]=1;while(!que.empty()){auto w=que.front();que.pop();int ans=sum[w.first][w.second]+1;if(w.first==ex&&w.second==ey){printf("%d\n",ans-1);return;}for(int i=0;i<4;i++ ){int aa=w.first+dx[i],bb=w.second+dy[i];if(aa==ex&&bb==ey&&za[aa][bb]==0&&temp3[aa][bb]==0&&ans<=huo[aa][bb]){printf("%d\n",ans);return;}if(aa>=1&&bb>=1&&aa<=n&&bb<=m&&za[aa][bb]==0&&temp3[aa][bb]==0&&ans<huo[aa][bb]){temp3[aa][bb]=1;que.push(make_pair(aa,bb));sum[aa][bb]=ans;}}}printf("T_T\n");
}
int main(){scanf("%d",&t);while(t--){scanf("%d%d",&n,&m);scanf("%d%d%d%d%d%d",&x,&y,&ex,&ey,&fx,&fy);scanf("%d",&k);for(int i=0;i<k;i++){scanf("%d%d",&ai,&bi);za[ai][bi]=1;}bfs1(fx,fy);bfs2(x,y);memset(za,0,sizeof(za));memset(temp1,0,sizeof(temp1));memset(temp3,0,sizeof(temp3));memset(sum,0,sizeof(sum));memset(huo,0,sizeof(huo));}
}

H.迷宫,(算法选修)相关推荐

  1. NVDKC6416平台H.264算法优化

    本文转载自:http://blog.csdn.net/embedesign/archive/2009/09/15/4556486.aspx,版权归原作者,编辑:小乙哥 多媒体通信终端设备具有广泛的应用 ...

  2. 算法选修(J.琴和可莉)(为选修画上句号)

    可莉又去池塘炸鱼啦!琴团长决定亲自捉拿可莉将其关禁闭.琴团长不断地追,可莉不断地跑. 琴团长和可莉的行动路线可以看做是一个有n个节点的无根树,初始时琴团长在A点,可莉在B点,她们互相知道对方的位置. ...

  3. Java 地下迷宫·算法·(ACM/蓝桥杯)·递归解法

    题目:小青蛙有一天不小心落入了一个地下迷宫,小青蛙希望用自己仅剩的体力值P跳出这个地下迷宫.为了让问题简单,假设这是一个n*m的格子迷宫,迷宫每个位置为0或者1,0代表这个位置有障碍物,小青蛙达到不了 ...

  4. H.264算法的优化策略

    文章来源: http://www.tichinese.com/Article/Video/200909/2150.html 编辑:小乙哥 1 代码优化的主要方法 通过代码移植能够获得在DSP上初步运行 ...

  5. Convex Hull:O(h*n)算法 Jarvis March

    课程:计算几何 书籍:计算几何:算法与应用 Jarvis March算法也是一种递增式的思路.以极边的一个端点为起点,来查找另一条极边.以此进行下去,最后构成一个环路时(极点的末端等于最初的起始端点) ...

  6. 用matlab编程实现h鲁棒控制算法,利用matlab实现H-infinity鲁棒控制

    利用matlab实现H-infinity鲁棒控制 利用Matlab实现H∞控制 Prof. Dr.-Ing.F.Allgwer Institute for Systems Theory and Aut ...

  7. 老鼠走迷宫---算法集

    问题描述 老鼠走迷宫是递回求解的基本题型,我们在二维阵列中使用 2 表示迷宫墙壁,使用 1 来表示老鼠的行走路径,试以程式求出由入口至出口的路径. 解决思路 老鼠的走法有上.左.下.右四个方向,在每前 ...

  8. 问题 H: 迷宫问题

    题目描述 定义一个二维数组: int maze[5][5] = {0, 1, 0, 0, 0,0, 1, 0, 1, 0,0, 0, 0, 0, 0,0, 1, 1, 1, 0,0, 0, 0, 1, ...

  9. 实验三 基于A*迷宫的算法

    一 实验要求 1.迷宫随机生成 2.玩家走迷宫,留下足迹: 3.系统用A*算法寻路,输出路径 解决问题 1.如何显示迷宫的图形界面: 2.如何生成随机的迷宫: 3.怎样移动游戏中走迷宫的"玩 ...

最新文章

  1. 表格Table宽度设置无效的解决方法
  2. python乘法口诀代码-python---九九乘法表代码
  3. ElasticSearch 6.0.0 IK分词 Kibana 6.0.0
  4. C语言编程序输出SCHAR_MAX的,运用堆栈把十进制变换成二进制
  5. /dev/mtdN和/dev/mtdblockN的区别
  6. css flexbox模型_Flexbox和CSS Grid之间的主要区别
  7. 终于换了杀毒工具(NOD32教育网升级)
  8. 服务器安装lnmp的时候出现client_loop: send disconnect: Connection reset by peer
  9. java坦克大战总体功能设计_java课程设计——坦克大战
  10. Asp.NET MVC 技术参考:http://kb.cnblogs.com/zt/mvc/
  11. python调用百度地图画轨迹图_利用python和百度地图API实现数据地图标注的方法
  12. 真正解决办法:编译freeswitch错误,You must install libavformat-dev to build mod_av
  13. 深度学习资料整理(深度神经网络理解)
  14. 关于网页设计工具的50个新的资源和灵感
  15. 微信机器人,微信聊天机器人搭建教程附源代码
  16. taskctl控制容器之定时器个人理解
  17. apk反编译教程(2022win11亲测)
  18. 精英二代手柄测试软件,微软精英手柄2代评测 继续引领行业标准
  19. CSS选择器常见用法
  20. NetSuite Saved Search不是啥都能查

热门文章

  1. Unity2019刷地形教程
  2. 广州未成年子女落户政策需要什么申请条件和申办材料
  3. qq空间java_Java版 QQ空间自动登录无需拷贝cookie一天抓取30WQQ说说数据流程分析...
  4. 生成13位条形码 Ean-13码规则: 第十三位数字是前十二位数字经过计算得到的校验码。
  5. 培训!培训!包就业(下)——漂在中关村(6)
  6. Windows用户层技术工具与源码分享
  7. git如何把分支提交的代码同步到另一个分支(git cherry-pick)
  8. iOS开发--一些开源的学习资源
  9. silva132_与詹姆斯·席尔瓦(James Silva)的对话,
  10. python代码优化工具,python - 优化WER(字错误率)代码?