开始刷题啦= = 痛并快乐着,学到新东西的感觉其实比看那些无脑的小说、电视剧有意思多了

bfs裸体,关键是先把所有的着火点放入队列,分开一个一个做bfs会超时的

发现vis[][]是多余的,完全可以用num[][]代替了,不过不提交了。。。

uva的submission error跳得我蛋疼,可是介于管理员Carlos及时回复了,还是理解人家吧

 #include<cstdio>
#include<cstring> const int MAXN=; struct P{
int x,y;
int c;
}; P que[MAXN*MAXN];
char mp[MAXN][MAXN];
int num[MAXN][MAXN],vis[MAXN][MAXN]; int dir[][]={,,-,,,,,-};
int n,m,flog;
int xi[MAXN],yi[MAXN]; void bfs(int l,int r)
{
while(l<r)
{
int x=que[l].x;
int y=que[l].y;
int c=que[l++].c;
num[x][y]=c;
for(int i=;i<;i++)
{
int dx=x+dir[i][];
int dy=y+dir[i][]; if(dx<||dy<||dx>=n||dy>=m){
if(!flog){
flog=;
que[].c=c;
}
continue;
}
if(!vis[dx][dy]&&mp[dx][dy]!='#'&&(num[dx][dy]>c+||num[dx][dy]==-)){
vis[dx][dy]=;
que[r].x=dx;
que[r].y=dy;
que[r++].c=c+;
}
}
}
} int main()
{
int T,x,y;
int i,j,k;
int l,r; scanf("%d",&T);
while(T--)
{
int tot=;
scanf("%d%d",&n,&m);
for(i=;i<n;i++)
{
getchar();
for(j=;j<m;j++)
{
scanf("%c",&mp[i][j]);
if(mp[i][j]=='J'){
x=i;
y=j;
}
if(mp[i][j]=='F'){
xi[tot]=i;
yi[tot++]=j;
}
}
} memset(num,-,sizeof(num));
memset(vis,,sizeof(vis));
for(i=;i<tot;i++)
{
vis[xi[i]][yi[i]]=;
que[i].x=xi[i];
que[i].y=yi[i];
que[i].c=;
}
bfs(,tot); memset(vis,,sizeof(vis));
flog=;
que[].x=x;
que[].y=y;
que[].c=;
bfs(,); if(flog){
printf("%d\n",que[].c);
}else {
printf("IMPOSSIBLE\n");
}
}
return ;
}
/*
8 8
........
..F...F.
....J...
...F....
......F.
........
........
........ 5 5
.....
.###.
.#J#.
.###.
..... 5 5
.....
.#F#.
.FJF.
.#F#.
..... 5 5
....F
.#.#.
..J..
.#.#.
F.... 5 5
....F
.#.#.
..J..
.#.#.
.....
*/

uva 11624 Fire!(搜索)的更多相关文章

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

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

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

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

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

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

  4. UVA 11624 Fire!(广度优先搜索)

    题目大意:在一个N*M的迷宫内,J代表某人(只有一个),F代表火(可能不只一个),#代表墙,火每分钟会向四周除了墙以外的地方扩散一层,问人能否在没被火烧到 之前逃出迷宫,若能逃出输出最短时间.很明显的 ...

  5. UVA 11624 Fire! BFS搜索

    题意:就是问你能不能在火烧到你之前,走出一个矩形区域,如果有,求出最短的时间 分析:两遍BFS,然后比较边界 #include<cstdio> #include<algorithm& ...

  6. UVA 11624 Fire!【两点BFS】

    Joe works in a maze. Unfortunately, portions of the maze have caught on fire, and the owner of the m ...

  7. UVA 11624 - Fire! 图BFS

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

  8. UVa 11624 Fire!(BFS)

    Fire! Time Limit: 5000MS   Memory Limit: 262144KB   64bit IO Format: %lld & %llu Description Joe ...

  9. UVA 11624 Fire! (bfs)

    算法指南白书 分别求一次人和火到达各个点的最短时间 #include<cstdio> #include<cstring> #include<queue> #incl ...

随机推荐

  1. Thinkphp中路由Url获取的使用方法

    Thinkphp是一个体系较为完整的框架,很多地方比国外的框架功能都全,唯一不喜之处是性能,和传说中的.NET有点像. Thinkphp提供较全url处理体系,通过同一规则实现Url的路由和Url生成 ...

  2. Educational Codeforces Round 11 C. Hard Process 前缀和+二分

    题目链接: http://codeforces.com/contest/660/problem/C 题意: 将最多k个0变成1,使得连续的1的个数最大 题解: 二分连续的1的个数x.用前缀和判断区间[ ...

  3. Maven--(一个坑)在settings.xml文件中添加mirrors导致无法新建Maven项目

    这是用新电脑第一次创建Maven项目--当然是一个测试项目.已经差不多忘了该怎样做,所以参考我的博客:http://www.cnblogs.com/wql025/p/4996486.html,这应该是 ...

  4. nenu contest3 The 5th Zhejiang Provincial Collegiate Programming Contest

    ZOJ Problem Set - 2965 Accurately Say "CocaCola"!  http://acm.zju.edu.cn/onlinejudge/showP ...

  5. [设计模式] 4 原型模式 prototype

    设计模式:可复用面向对象软件的基础>(DP)本文介绍原型模式和模板方法模式的实现.首先介绍原型模式,然后引出模板方法模式. DP书上的定义为:用原型实例指定创建对象的种类,并且通过拷贝这些原型创 ...

  6. SDUT2482二叉排序树

    http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2482&cid=1184 题目描述 二叉排序树的定义是:或者是一棵空树,或者是具有下列性质 ...

  7. [SQL Server系] -- 基本概念

    以下是我总结的 SQL Server 数据库中的一些 基本概念,以便模糊时查询, 欢迎补充 1:主键: 概念: 数据表 经常有  一个列 或 列的组合,其值能唯一地标识表中的每一行.这样的一列或多列称 ...

  8. struts2 json关于Date日期的解析

    在get方法前加上: @JSON(format="yyyy-MM-dd HH:mm:ss")

  9. 使用post()方法以POST方式从服务器发送数据

    使用post()方法以POST方式从服务器发送数据 与get()方法相比,post()方法多用于以POST方式向服务器发送数据,服务器接收到数据之后,进行处理,并将处理结果返回页面,调用格式如下: $ ...

  10. lintcode : 二叉树的层次遍历II

    题目 二叉树的层次遍历 II 给出一棵二叉树,返回其节点值从底向上的层次序遍历(按从叶节点所在层到根节点所在的层遍历,然后逐层从左往右遍历) 样例 给出一棵二叉树 {3,9,20,#,#,15,7}, ...