UVA 11624 BFS的妙用
题意:
迷宫里起火了,有若干个障碍物,有多个起火点,起火点每经过一个时间间隔就向它的上下左右相邻的格子扩散。
有个倒霉的人好像叫做“Joe”,他要逃出来,他每次可以向上下左右任意移动一格,但是即要避开火也要避开障碍物,问你他如果逃得出来的话至少要多少步。
没有着火点的话就直接,bfs了,但是有的话就稍微与处理一下,我们可以通过对着火点bfs,从而知道每个格子在什么时间着火。
这样的话,只要先bfs着火点,把每个格子在什么时间着火保存到数组里;然后bfs那个人,在判断他可不可以那个格子的check函数增加一步,检查他走过去的时间是不是小于起火的时间。
源代码:
#include <stdio.h>
#include <string.h>
const int maxn=;
const int sizeq=;
bool vis[maxn][maxn];
int fi[maxn][maxn],dis[maxn][maxn];
char map[maxn][maxn];
int dir[][]={{-,},{,},{,-},{,}};
int T,R,C,ans;
bool flag; struct Node{
int x,y;
};
Node q[sizeq];
int font,rear;
void Enqueue(Node x)
{
q[rear++]=x;
if(rear==sizeq) rear=;
}
Node Dequeue()
{
Node z=q[font++];
if(font==sizeq) font=;
return z;
}
bool check(Node nd)
{
return nd.x<||nd.y<||nd.x>=R||nd.y>=C||map[nd.x][nd.y]=='#'||vis[nd.x][nd.y];
}
void fire()
{
Node f,nx;
memset(fi,,sizeof(fi));
memset(vis,,sizeof(vis));
font=rear=;
for(int i=;i<R;i++){
for(int j=;j<C;j++){
if(map[i][j]=='F'){
f.x=i;
f.y=j;
fi[i][j]=;
vis[i][j]=;
Enqueue(f);
}
}
}
while(font!=rear){
f=Dequeue();
for(int i=;i<;i++){
nx.x=f.x+dir[i][];
nx.y=f.y+dir[i][];
if(check(nx))continue;
fi[nx.x][nx.y]=fi[f.x][f.y]+;
vis[nx.x][nx.y]=;
Enqueue(nx);
}
}
} bool safe(Node x,int d)
{
return !check(x) && (fi[x.x][x.y]>d||fi[x.x][x.y]==);
} int bfs()
{
Node u,v;
font=rear=;
memset(dis,,sizeof(dis));
memset(vis,,sizeof(vis));
for(int i=;i<R;i++){
for(int j=;j<C;j++){
if(map[i][j]=='J'){
u.x=i;
u.y=j;
Enqueue(u);
vis[i][j]=;
dis[i][j]=;
}
}
}
while(font!=rear){
u=Dequeue();
if(u.x==||u.x==R-||u.y==||u.y==C-){
return dis[u.x][u.y];
}
for(int i=;i<;i++){
v.x=u.x+dir[i][];
v.y=u.y+dir[i][];
if(!safe(v,dis[u.x][u.y]+))continue;
Enqueue(v);
vis[v.x][v.y]=;
dis[v.x][v.y]=dis[u.x][u.y]+;
}
}
return ;
} int main()
{
scanf("%d",&T);
while(T--){
scanf("%d %d",&R,&C);
for(int i=;i<R;i++)scanf("%s",map[i]);
fire();
ans=bfs();
if(ans){
printf("%d\n",ans);
}else{
puts("IMPOSSIBLE");
}
} }
UVA 11624 BFS的妙用的更多相关文章
- uva 11624(bfs)
		
11624 - Fire! Time limit: 1.000 seconds Joe works in a maze. Unfortunately, portions of the maze hav ...
 - UVa 11624 (BFS) Fire!
		
也是一个走迷宫的问题,不过又有了点变化. 这里迷宫里有若干把火,而且火每秒也是向四个方向蔓延的.问人是否能走出迷宫. 我用了两遍BFS,第一遍把所有着火的格子加入队列,然后计算每个格子着火的时间. 第 ...
 - UVA - 11624 Fire!  bfs 地图与人一步一步先后搜/搜一次打表好了再搜一次
		
UVA - 11624 题意:joe在一个迷宫里,迷宫的一些部分着火了,火势会向周围四个方向蔓延,joe可以向四个方向移动.火与人的速度都是1格/1秒,问j能否逃出迷宫,若能输出最小时间. 题解:先考 ...
 - BFS(两点搜索) UVA 11624 Fire!
		
题目传送门 /* BFS:首先对火搜索,求出火蔓延到某点的时间,再对J搜索,如果走到的地方火已经烧到了就不入队,直到走出边界. */ /******************************** ...
 - UVA 11624 UVA 10047 两道用 BFS进行最短路搜索的题
		
很少用bfs进行最短路搜索,实际BFS有时候挺方便得,省去了建图以及复杂度也降低了O(N*M): UVA 11624 写的比较挫 #include <iostream> #include ...
 - E - Fire! UVA - 11624(bfs + 记录火到达某个位置所需要的最小时间)
		
E - Fire! UVA - 11624 题目描述 乔在迷宫中工作.不幸的是,迷宫的一部分着火了,迷宫的主人没有制定火灾的逃跑计划.请帮助乔逃离迷宫.根据乔在迷宫中的位置以及迷宫的哪个方块着火,你必 ...
 - UVa 11624 Fire!(着火了!)
		
UVa 11624 - Fire!(着火了!) Time limit: 1.000 seconds Description - 题目描述 Joe works in a maze. Unfortunat ...
 - UVa 11624,两次BFS
		
题目链接:http://vjudge.net/contest/132239#problem/A 题目链接:https://uva.onlinejudge.org/external/116/11624. ...
 - UVA 11624 Fire! bfs 难度:0
		
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...
 
随机推荐
- php排序
			
关于order by排序:单条件排序:order by id(按照id排序默认从小到大) order by id desc(按照id排序从大到小) 多条件排序:order by date,id(先按照 ...
 - js 的match方法
			
怎么调用? 字符串对象.match( 目标串 ); 返回值? 如果存在,就返回这个字符串: 否则, 返回null 实例 举一个常用的例子,判断图片路径是否包含某个字符串.
 - C 格式输出
			
1 一般格式 printf(格式控制,输出表列) 例如:printf("i=%d,ch=%c\n",i,ch); 说明: (1) “格式控制”是用双撇号括起 ...
 - 【emWin】例程五:显示数值
			
实验指导书及代码包下载: 链接:http://pan.baidu.com/s/1pLexsAf密码:p0jf 实验现象:
 - hihoCoder 1183 连通性一·割边与割点(Tarjan求割点与割边)
			
#1183 : 连通性一·割边与割点 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 还记得上次小Hi和小Ho学校被黑客攻击的事情么,那一次攻击最后造成了学校网络数据的丢 ...
 - mmysql-最大链接数和最大并发数的区别
			
关于连接数和并发数的设置(针对Innodb引擎) 对于机器本身来说,进程数是说机器正在运行的进程数量,调出任务管理器就可以看到.连接数是指进程接收和发送数据的连接ip的数量.并发数是指进程同时发送数据 ...
 - rabbitmq使用心得
			
因为公司项目需要使用消息中间件,实现相关业务的异步处理,所有选用了rabbitmq.通过看文档,爬过一个一个坑,终于还是实现了相关功能. 直接上配置文件: <?xml version=" ...
 - centos 基本调优
			
一.内核(sysctl.conf) 1.加大端口号范围net.ipv4.ip_local_port_range = 10240 65000 2.tcp/ip重用及超时限制net.ipv4.tcp_sy ...
 - Windows下wnmp相关配置
			
#wnmp mysqld -install net start mysql memcached -d uninstall memcached -d install net start memcache ...
 - iscoll制作顶部可以左右滑动的tab
			
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...