UVA - 11624 Fire!(BFS)
2015-10-10 11:10
435 查看
题目大意:给出一个矩阵,’#’表墙壁,’J’表示人,’F’表示火,’.’表示空地,人一个单位时间内只能移动一个单位(上下左右),火一个单位时间内能把四周的空地都燃着,问这个人能否逃出迷宫,如果能逃出,最短时间是多少
解题思路:BFS,用队列处理火和人的关系,人先走,火再蔓延
有火的地方蔓延只能蔓延一次就够了,也就是说只能进入队列一次
解题思路:BFS,用队列处理火和人的关系,人先走,火再蔓延
有火的地方蔓延只能蔓延一次就够了,也就是说只能进入队列一次
#include <cstdio> #include <cstring> #include <queue> using namespace std; const int N = 1010; struct Node{ int x, y, time, mark; Node() {} Node(int x, int y, int time, int mark): x(x), y(y), time(time), mark(mark){} }; char map ; bool vis ; int fire[N * N]; int startX, startY, cnt, n, m; int dir[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}}; void init() { scanf("%d%d", &n, &m); cnt = 0; for (int i = 0; i < n; i++) { scanf("%s", map[i]); for (int j = 0; j < m; j++) { if (map[i][j] == 'J') { startX = i; startY = j; } else if (map[i][j] == 'F') { fire[cnt++] = i * m + j; } } } } void bfs() { queue<Node> Q; memset(vis, 0, sizeof(vis)); Q.push(Node(startX, startY, 0, 0)); vis[startX][startY] = 1; for (int i = 0; i < cnt; i++) Q.push(Node(fire[i] / m, fire[i] % m, 0, 1)); while (!Q.empty()) { Node t = Q.front(); Q.pop(); if (t.mark == 0 && map[t.x][t.y] == 'F') continue; if (t.mark == 0 && (t.x == n - 1 || t.y == m - 1 || t.x == 0 || t.y == 0)) { printf("%d\n", t.time + 1); return ; } for (int i = 0; i < 4; i++) { int xx = t.x + dir[i][0]; int yy = t.y + dir[i][1]; if (!(xx < 0 || xx >= n || yy < 0 || yy >= m)) { if (map[xx][yy] == '.') { if (t.mark == 1) { map[xx][yy] = 'F'; Q.push(Node(xx, yy, t.time + 1, 1)); } else if (!vis[xx][yy]) { vis[xx][yy] = 1; Q.push(Node(xx, yy, t.time + 1, 0)); } } } } } printf("IMPOSSIBLE\n"); } int main() { int test; scanf("%d", &test); while (test--) { init(); bfs(); } return 0; }
相关文章推荐
- Java集合的优化
- Android Service完全解析
- C++primer第五版笔记-第十八章用于大型程序的工具
- web前端有用的十个JQuery代码片段
- 嵌入式开发中常用商用软件的FreeWare替换
- 自定义Notification和Toast
- Windows远程桌面连接Ubuntu 14.04
- 支付宝接口开发总结
- HTML5、CSS3(笔记)
- C++primer第五版笔记-第十七章标准库特殊设施
- Integer类型比较
- AIX 永久修改环境变量
- abmr:块恢复特性测试自己主动
- Squid
- Jenkins(二) 安装、新建Jobs与删除及SVN配置
- 最小二乘法
- Tomcat搭建
- apue环境搭建
- 手把手教你学会JSP上传文件方法
- 串口接收中断和连续发送的矛盾!