博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
uva Fire!
阅读量:5924 次
发布时间:2019-06-19

本文共 2549 字,大约阅读时间需要 8 分钟。

算法:BFS

Joe works in a maze. Unfortunately, portions of the maze have

caught on fire, and the owner of the maze neglected to create a fire
escape plan. Help Joe escape the maze.
Given Joe’s location in the maze and which squares of the maze
are on fire, you must determine whether Joe can exit the maze before
the fire reaches him, and how fast he can do it.
Joe and the fire each move one square per minute, vertically or
horizontally (not diagonally). The fire spreads all four directions
from each square that is on fire. Joe may exit the maze from any
square that borders the edge of the maze. Neither Joe nor the fire
may enter a square that is occupied by a wall.
Input
The first line of input contains a single integer, the number of test
cases to follow. The first line of each test case contains the two
integers R and C, separated by spaces, with 1 ≤ R, C ≤ 1000. The
following R lines of the test case each contain one row of the maze. Each of these lines contains exactly
C characters, and each of these characters is one of:
• #, a wall
• ., a passable square
• J, Joe’s initial position in the maze, which is a passable square
• F, a square that is on fire
There will be exactly one J in each test case.
Output
For each test case, output a single line containing ‘IMPOSSIBLE’ if Joe cannot exit the maze before the
fire reaches him, or an integer giving the earliest time Joe can safely exit the maze, in minutes.
Sample Input
2
4 4
####
#JF#
#..#
#..#
3 3
###
#J.
#.F
Sample Output
3
IMPOSSIBLE

注意开始有多个火堆;

代码:

#include 
#include
#include
#include
#include
#include
#define INF 100000000using namespace std;char ch[1005][1005];int b[1005][1005],c[1004][1005],qq,cnt,d[1005][2];int n,m,a[4][2]={-1,0,0,-1,0,1,1,0},p,q;struct dot{ int x,y,step; };void bfs(){ memset(c,0,sizeof(c)); queue
que; dot cur,loer; for(int i=0;i
=0&&dx
=0&&dy
que; dot cur,loer; cur.x=p; cur.y=q; cur.step=0; c[p][q]=1; que.push(cur); while(que.size()) { loer=que.front(); que.pop(); if(loer.x==0||loer.x==n-1||loer.y==0||loer.y==m-1) { qq=1; cout<
<
=0&&dx
=0&&dy
loer.step+1) { cur.x=dx; cur.y=dy; cur.step=loer.step+1; c[dx][dy]=1; que.push(cur); } } }}int main(){ int T,i,j,k; cin>>T; while(T--) { cin>>n>>m; cnt=0; for(i=0;i
>ch[i][j]; b[i][j]=INF; if(ch[i][j]=='J') { p=i;q=j; ch[i][j]='.'; } else if(ch[i][j]=='F') { d[cnt][0]=i; d[cnt++][1]=j; } } } qq=0; bfs(); bsf(); if(qq==0) cout<<"IMPOSSIBLE"<

转载于:https://www.cnblogs.com/wangyumin/p/5323442.html

你可能感兴趣的文章
基于ZooKeeper的分布式Session实现
查看>>
演讲实录|马晓宇:When TiDB Meets Spark
查看>>
java web 文件上传下载
查看>>
详有记录
查看>>
代码设计模式之简单工厂模式(Factory)
查看>>
JSP打入jar包
查看>>
NSThread
查看>>
Linux下安装Maven3.1.1
查看>>
面试题(9)
查看>>
MySQL数据库优化那些事
查看>>
CSS样式的优先级对比验证
查看>>
php中mysql和mysqli的区别
查看>>
在Mac上配置Sublime Text 2
查看>>
《开源安全运维平台OSSIM最佳实践》当当自营店 3-15活动 ,仅售 6 折
查看>>
从0到1使用Kubernetes系列(五):Kubernetes Scheduling
查看>>
Choerodon 的微服务之路(四):深入理解微服务配置中心
查看>>
JS格式化数字金额用逗号隔开保留两位小数
查看>>
国内的maven repository镜像
查看>>
Spring Cloud Alibaba基础教程:Nacos配置的加载规则详解
查看>>
极乐小程序榜单(第三期)
查看>>