题目连接:http://acm.hust.edu.cn/vjudge/problem/28833

/*
首先对整个图bfs一次得到火焰燃烧的时刻表
之后在bfs搜路径时加一个火烧表的判断
坑点在于:如果时刻表等于0应该是从未烧过。。。如果不加以区分就会wa
*/
#include <bits/stdc++.h>
#define scan(x) scanf("%d",&x)
#define M(x) memset(x,0,sizeof(x))
#define REF(i,n) for(int i=1;i<=n;i++)
using namespace std;
const int Max=1e3+;
char mat[Max][Max];
int book[Max][Max];
int vis[Max][Max];
int n,m,stx,sty;
struct node
{
int x,y,step;
node(){x=y=step=;}
node(int xx,int yy,int ss):x(xx),y(yy),step(ss){}
};
int nex[][]={,,,,,-,-,};
queue<node>que1;
void bfs1()
{
M(book);M(vis);
node u,v;
while(!que1.empty())
{
u=que1.front();
que1.pop();
for(int k=;k<;k++)
{
v.x=u.x+nex[k][];
v.y=u.y+nex[k][];
v.step=u.step+;
if(v.x<||v.y<||v.x>n||v.y>m) continue;
if(mat[v.x][v.y]=='#') continue;
if(book[v.x][v.y]) continue;
book[v.x][v.y]=v.step;
que1.push(v);
}
}
}
int bfs2()
{
M(vis);
queue<node>que;
node u,v;
que.push(node(stx,sty,));
vis[stx][sty]=;
while(!que.empty())
{
u=que.front();
que.pop();
for(int k=;k<;k++)
{
v.x=u.x+nex[k][];
v.y=u.y+nex[k][];
v.step=u.step+;
if(v.x<||v.y<||v.x>n||v.y>m) return v.step;
if(book[v.x][v.y]!=&&book[v.x][v.y]<=v.step) continue;//book[i][j]!=0
if(mat[v.x][v.y]=='#'||mat[v.x][v.y]=='F') continue;//不能把从未着火的点也排除
if(vis[v.x][v.y]) continue;
vis[v.x][v.y]=;
que.push(v);
}
}
return -;
}
int main()
{
int T;
for(scan(T);T;T--)
{
cin>>n>>m;getchar();
while(!que1.empty()) que1.pop();
REF(i,n)
{
REF(j,m)
{
scanf("%c",&mat[i][j]);
if(mat[i][j]=='J') stx=i,sty=j;
if(mat[i][j]=='F') que1.push(node(i,j,));
}
getchar();
}
bfs1();
int ans=bfs2();
if(ans!=-) cout<<ans<<endl;
else cout<<"IMPOSSIBLE"<<endl;
}
return ;
}

Fire uva 11624的更多相关文章

  1. E - Fire! UVA - 11624(bfs + 记录火到达某个位置所需要的最小时间)

    E - Fire! UVA - 11624 题目描述 乔在迷宫中工作.不幸的是,迷宫的一部分着火了,迷宫的主人没有制定火灾的逃跑计划.请帮助乔逃离迷宫.根据乔在迷宫中的位置以及迷宫的哪个方块着火,你必 ...

  2. J - Fire!---UVA 11624

    题目链接 题意:J代表Joe的位置,F代表火的起点,下一刻火将会向四周扩散,求Joe逃离的最短时间,如果不能逃离输出IMPOSSIBLE; 注意火的起点可能不止一处 可以用两次bfs分别求出人到达某个 ...

  3. Fire! UVA - 11624 (两步bfs)

    题目链接 题意 人要从迷宫走出去,火会向四个方向同时扩散 分析 两步bfs,先出火到达各地时的时间(设初始时间为0,人每走一步为1s,在着一步内火可以向四周可触及的方向同时扩散),然后在bfs人,人能 ...

  4. kuangbin专题 专题一 简单搜索 Fire! UVA - 11624

    题目链接:https://vjudge.net/problem/UVA-11624 题意:一个迷宫,可能有一个或者多个地方着火了,每过1个时间消耗,火会向四周蔓延,问Joe能不能逃出迷宫,只要走出迷宫 ...

  5. UVa 11624 Fire!(着火了!)

    UVa 11624 - Fire!(着火了!) Time limit: 1.000 seconds Description - 题目描述 Joe works in a maze. Unfortunat ...

  6. UVA - 11624 Fire! bfs 地图与人一步一步先后搜/搜一次打表好了再搜一次

    UVA - 11624 题意:joe在一个迷宫里,迷宫的一些部分着火了,火势会向周围四个方向蔓延,joe可以向四个方向移动.火与人的速度都是1格/1秒,问j能否逃出迷宫,若能输出最小时间. 题解:先考 ...

  7. BFS(两点搜索) UVA 11624 Fire!

    题目传送门 /* BFS:首先对火搜索,求出火蔓延到某点的时间,再对J搜索,如果走到的地方火已经烧到了就不入队,直到走出边界. */ /******************************** ...

  8. UVA 11624 UVA 10047 两道用 BFS进行最短路搜索的题

    很少用bfs进行最短路搜索,实际BFS有时候挺方便得,省去了建图以及复杂度也降低了O(N*M): UVA 11624 写的比较挫 #include <iostream> #include ...

  9. UVA 11624 - Fire! 图BFS

    看题传送门 昨天晚上UVA上不去今天晚上才上得去,这是在维护么? 然后去看了JAVA,感觉还不错昂~ 晚上上去UVA后经常连接失败作死啊. 第一次做图的题~ 基本是照着抄的T T 不过搞懂了图的BFS ...

随机推荐

  1. IMX6输出可控PWM

    驱动部分 #include <linux/init.h> #include <linux/module.h> #include <linux/moduleparam.h& ...

  2. 'Invalid parameter not satisfying: body'

    afnetwork图片上传的时候出错,出现错误 2015-11-09 15:47:59.086 videoPro[3207:132795] *** Assertion failure in -[AFS ...

  3. java 代码判断图片格式后缀名称

    /** * 图片判断 */ private static String getFormatName(Object o) { try { // Create an image input stream ...

  4. unity3d InverseTransformPoint方法

    从歪果仁的脚本里看到了这个方法,查脚本,看脚本说明也没看懂,官方的说明是,变换位置从世界坐标到自身坐标,Transform.TransformPoint相反. 试验了一下得出这个结论,如果某一个物体A ...

  5. loadrunner工具使用之脚本创建

    loadrunner工具使用之脚本创建 一.创建脚本 1.打开loadrunner,选择第一个控件VuGen(创建/编辑脚本),点击

  6. 如何使用XproerUI库(WTL)-XproerUI界面库教程

    版权所有 2009-2015 荆门泽优软件有限公司 保留所有权利 产品首页:http://www.ncmem.com/apps/xproerui/index.asp 开发文档(SkinStudio): ...

  7. Xcode 字体 设置-- Xcode family没有显示的字体

    前往文件夹 -> /Users/user/Library/Developer/Xcode/UserData/FontAndColorThemes/  (user改为自己的用户名) -----如果 ...

  8. servletconfig和servletContext的区别

    1.servletConfig: 在Servlet的配置文件中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数.(配置在某个servlet标签或者整个we ...

  9. Prime Factory

    Your task is simple:Find the first two primes above 1 million, whose separate digit sums are also pr ...

  10. 手机抓包xcode自带命令行工具配合wireshark实现

    三.最佳方式:rvictl命令 优点:简单,而且可以抓所有网络接口的数据: 缺点:似乎没有,要求手机iOS5以上不算要求吧?如果说缺点,就是这个命令是Xcode的Command Line Tools ...