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. 字符串处理stringr包在微生物生态的应用基础
  2. STM32 进阶教程 13 – FLASH的读写操作
  3. 杭电1728bfs逃离迷宫java实现
  4. AutoCAD VBA对齐对象
  5. loadrunner 分用户日志
  6. 浏览器了解(二)HTML解析过程
  7. WWW软件全球使用排名
  8. CAS单点登录配置[3]:服务器端配置
  9. django开源电子文档管理系统_Python实操技术分享:Django文件管理系统,Apple的学习思路...
  10. 数据状态什么是事务?
  11. [转载] 民兵葛二蛋——第18集
  12. 4.C++深入理解 面向对象部分3
  13. MySQL 数据查询
  14. CentOS搭建git服务器实测
  15. 网易云解析接口PHP源码,网易云音乐热评API抓取PHP源码
  16. Linux系统数据文件和信息
  17. 抖音育儿类账号的创作灵感分享, 想进圈的不妨了解一下
  18. 服务器游戏性能测试工具,python 游戏服务器 性能测试工具
  19. 计算机理论参考文献,计算机理论英文参考文献 计算机理论论文参考文献哪里找...
  20. java 用0部补位_java 用0部补位

热门文章

  1. 跨平台下移动应用的开发框架对比与分析
  2. 归档命令(5)——shar
  3. 新课重磅发布-Java开发微信朋友圈PC版系统(架构2.0+分布式中间件)
  4. 【PowerBI】CALCULATE函数应用
  5. win7 64位 java_1.win7 64位 java安装
  6. 优信拍集团php面试题_【优信拍PHP面试】一次不错的面试体验,面试官根据实际出发提问。-看准网...
  7. crt显存试题计算机,2008年9月全国计算机三级考试《PC技术》笔试真题
  8. 【第4期-智能驾驶汽车系列术语概念解析】第3节:基于三点参数方程的曲率计算方法
  9. 自动部署 打造个人网站:阿里云(ECS)+域名+Node+Webhooks(github)
  10. chromium 安装flash-plugins 解决方案