题目连接: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. Python:if __name__ == '__main__'

    很多模块里都会看到这句话,一般用于模块自测时使用. 所有的模块都有一个内置属性 __name__. 一个模块的 __name__ 的值取决于您如何应用模块. 一个Python文件有两种使用方式,直接使 ...

  2. sql group by

    group by实例 实例一 数据表: 姓名 科目 分数 张三 语文 80 张三 数学 98 张三 英语 65 李四 语文 70 李四 数学 80 李四 英语 90 期望查询结果: 姓名 语文 数学 ...

  3. MySQL 常用命令(持续更新)

    停止启动MySQL服务 停止:net stop mysql启动:net start mysql 查看正在运行的线程 SHOW PROCESSLIST SHOW FULL PROCESSLIST 杀死线 ...

  4. 2008server安装Intel I217V网卡驱动

    问题:由于在职的是小公司,公司服务器都是DIY的,拒绝采购品牌服务器,所以配件都是自己DIY的,这样就会出现很多兼容性问题,例如服务器主板是AUS B85-PRO-Gamer,装的是服务器系统wind ...

  5. 一致性hash介绍

    像Memcache以及其它一些内存K/V数据库一样,Redis本身不提供分布式支持,所以在部署多台Redis服务器时,就需要解决如何把数据分散到各个服务器的问题,并且在服务器数量变化时,能做到最大程度 ...

  6. Android,配置Activity为启动Activity(AndroidManifest.xml,application,intent-filter,MAIN,LAUNCHER)

    备忘: 将Activity注册为启动Activity. 在AndroidManifest.xml中的<application>元素中加入以下<activity>子元素内容: & ...

  7. 排序算法 2 qsort 库函数,泛型函数

    _____谈谈排序算法 交换排序——>冒泡排序-->快速排序 选择排序——>简单选择排序——>堆排序 插入排序——>直接插入排序——>希尔排序 _____排序算法对 ...

  8. Android-ConvenientBanner轻松实现广告头效果

    Android-ConvenientBanner通用的广告栏控件,让你轻松实现广告头效果.支持无限循环, 可以设置自动翻页和时间(而且非常智能,手指触碰则暂停翻页,离开自动开始翻页. 你也可以设置在界 ...

  9. sql中列数据横着显示

    列数据横着显示:CREATE TABLE StudenScore(stuname VARCHAR(25) , kc VARCHAR(25) , fs INT)INSERT INTO StudenSco ...

  10. C++ dll调用

    HINSTANCE PH=LoadLibrary(_T("APlayerCaller.dll")); HWND hwnd = AfxGetMainWnd()->m_hWnd; ...