题干:

小z身处在一个迷宫中,小z每分钟可以走到上下左右四个方向的相邻格之一。迷宫中有一些墙和障碍物。
同时迷宫中也有一些传送门,当小z走到任意一个传送门时,可以选择传送到其他任意的传送门(传送是不花费时间的),
当然也可以停留在原地。现在小z想知道走出迷宫需要花费的最少时间。

Input

输入第一行为组数T(t<=10)。
对于每组数据第一行为两个整数R和C(1<=R,C<=100)。以下R行每行有C个字符,即迷宫地图。
其中"#"代表墙和障碍物,"."表示空地,"P"表示传送门,"Z"表示小z的起始位置,"W"表示迷宫出口。
对于每组数据保证起始位置和迷宫出口唯一。

Output

对于每组数据,输出走出迷宫的最短时间(单位:分钟)。如果无法走出迷宫则输出"IMPOSSIBLE"。

Sample Input

2
3 4
.Z..
.P#.
##PW
4 4
Z..P
....
##..
W#.P

Sample Output

2
IMPOSSIBLE

解题报告:

裸。bfs复习。

AC代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
const int MAX = 2e3 + 5;
struct N {int x,y;N(){}N(int x,int y):x(x),y(y){}
} p[MAX];
struct Node {int x,y;int t;Node(){}Node(int x,int y,int t):x(x),y(y),t(t){}
};
bool vis[505][505];
int tot,r,c;
char maze[505][505];
int nx[4] = {0,1,0,-1};
int ny[4] = {1,0,-1,0};
int bfs(N st,N ed) {queue<Node> q;q.push(Node(st.x,st.y,0));while(q.size()) {Node cur = q.front();q.pop();if(cur.x == ed.x && cur.y == ed.y) return cur.t;if(vis[cur.x][cur.y]) continue;vis[cur.x][cur.y] = 1;for(int k = 0; k<4; k++) {int tx = cur.x + nx[k];int ty = cur.y + ny[k];if(tx < 1 || tx > r || ty < 1 || ty > c) continue;if(maze[tx][ty] == '#') continue;q.push(Node(tx,ty,cur.t+1));}if(maze[cur.x][cur.y] == 'P') {for(int l = 1; l<=tot; l++) {if(p[l].x == cur.x && p[l].y == cur.y) continue;q.push(Node(p[l].x,p[l].y,cur.t));}}}return -1;
}
int main()
{int t;cin>>t;while(t--) {tot=0;memset(vis,0,sizeof vis);scanf("%d%d",&r,&c);for(int i = 1; i<=r; i++) {scanf("%s",maze[i] + 1);}int stx,sty,edx,edy;for(int i = 1; i<=r; i++) {for(int j = 1; j<=c; j++) {if(maze[i][j] == 'Z') stx = i,sty = j;if(maze[i][j] == 'W') edx = i,edy = j;if(maze[i][j] == 'P') p[++tot] = N(i,j);}}int ans = bfs(N(stx,sty),N(edx,edy));if(ans == -1) printf("IMPOSSIBLE\n");else printf("%d\n",ans);} return 0 ;
}
/*
14:46 - 14:57
*/

【HRBUST - 1613】迷宫问题 (bfs)相关推荐

  1. c语言oj题1923偶数之和,问题 1923: [蓝桥杯][算法提高VIP]学霸的迷宫 (BFS)

    题目描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二维的格子迷宫,要进城堡必须得先通过迷宫.因为班长还有妹子要陪,磨刀不 ...

  2. 01迷宫(BFS+记忆)

    题目描述 有一个仅由数字 0 与 1 组成的 n × n 格迷宫.若你位于一格 0 上,那么你可以移动到相邻 4 格中的某一格 1 上,同样若你位于一格 1 上,那么你可以移动到相邻 4 格中的某一格 ...

  3. POJ 3984 迷宫问题 BFS求最短路线+路径记录

    迷宫问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 31050   Accepted: 17826 Descriptio ...

  4. [蓝桥杯][算法提高VIP]学霸的迷宫(bfs+dfs)

    题目描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二维的格子迷宫,要进城堡必须得先通过迷宫.因为班长还有妹子要陪,磨刀不 ...

  5. 走迷宫-双向bfs解法

    双向bfs适用于知道起点和终点的状态下使用,从起点和终点两个方向开始进行搜索,可以非常大的提高单个bfs的搜索效率 同样,实现也是通过队列的方式,可以设置两个队列,一个队列保存从起点开始搜索的状态,另 ...

  6. poj3984 迷宫问题 bfs 最短路 广搜

    迷宫问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 27913   Accepted: 16091 Descriptio ...

  7. 【牛客 - 330C】Applese 走迷宫(bfs)

    题干: 精通程序设计的 Applese 双写了一个游戏. 在这个游戏中,它被困在了一个 n×mn×m 的迷宫中,它想要逃出这个迷宫. 在迷宫中,有一些方格是水池,只有当 Applese 处于水属性的时 ...

  8. LeetCode 490. 迷宫(BFS/DFS)

    文章目录 1. 题目 2. 解题 2.1 BFS 2.2 DFS 1. 题目 由空地和墙组成的迷宫中有一个球. 球可以向上下左右四个方向滚动,但在遇到墙壁前不会停止滚动. 当球停下时,可以选择下一个方 ...

  9. java蓝桥杯省赛第十届_2019年第十届蓝桥杯省赛-迷宫(BFS/Excel大法)

    这题用dfs搜不出来,需要使用bfs并记录路径,设置好方向顺序跑就ok 然而毕竟是暴力杯,我们的原则是代码能省就省(懒癌晚期 于是乎网上便出现了形形色色的题解,笔者综合了各路大神神乎其技的思想,总结出 ...

最新文章

  1. 程序代码初学者_初学者:如何使用热键在Windows中启动任何程序
  2. HAProxy 2.0发布,长期支持版本
  3. 阿里云视频点播解决方案使用教程
  4. DMN结合bpmn简化流程_07
  5. wordpress-Sakurairo美化主题模板
  6. 深度学习《CycleGAN》
  7. appium示例代码python_appium+Python 脚本编写
  8. jdbc_连接数据库
  9. intouch的报警怎么发到短信上
  10. 小于n的最大素数python_找到小于n的最大素数,n=~10^230
  11. 供应链管理 MOOC学习笔记(全)
  12. 【python初级】os.listdir返回目录中包含的文件以及文件夹的列表
  13. quartz表删除顺序
  14. No active profile set, falling back to default profiles: default问题
  15. omnet++ 4维的立方体网络仿真
  16. 【交互设计】什么是微交互
  17. Lab1实验过程及心得体会
  18. 我奋斗了18年才和你坐在一起喝咖啡 原作者:麦子
  19. 将自己的SSH密钥对导入YubiKey 5的PIV和智能卡模块,配合Putty和XShell使用
  20. 基于cesium的地形开挖地形剖切

热门文章

  1. 从零开始学习jQuery (三) 管理jQuery包装集【转】
  2. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第20篇]Merkle-Damgaard hash函数如何构造
  3. [Leedcode][JAVA][第542题][01矩阵][BFS]
  4. next_permutation算法(基于交换)
  5. 微机计算机原理姚向华课后答案,微型计算机操作系统
  6. nodejs python 通信_Nodejs环境实现socket通信过程解析
  7. 视图添加字段_使用ExploreByTouchHelper辅助类为自定义视图添加虚拟视图
  8. axios某一接口失败后不调用_axios 源码系列之如何取消请求
  9. pythom打包文件太大_从SQL注入到整站打包与本地搭建
  10. C# WinForm中获取当前程序运行目录的方法