2022春每日一题:Day 7


题目:Fire
先预处理出每个F蔓延的时间,再bfs走迷宫。
代码:
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <queue>
const int N=1005;
using namespace std;
struct pos
{
int x,y,s;
pos(int xx,int yy,int ss)
{
x=xx;y=yy;s=ss;
}
pos(){
}
}p;
char a[N][N];
int n,m,sx,sy,vis[N][N],b[N][N];
int nxt[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
queue < pos > q,q1;
void bfs()
{
while(!q1.empty())
{
pos p=q1.front();
q1.pop();
int x=p.x,y=p.y;
for(int i=0;i<4;i++)
{
int xx=x+nxt[i][0],yy=y+nxt[i][1];
if(xx<1 || xx>n || yy<1 || yy>m)
continue;
if(a[xx][yy]=='#')
continue;
if(vis[xx][yy]==-1 || p.s+1<vis[xx][yy])
vis[xx][yy]=p.s+1,q1.push(pos(xx,yy,p.s+1));
}
}
}
void solve()
{
memset(vis,-1,sizeof(vis));
memset(b,0,sizeof(b));
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++)
scanf("%s",a[i]+1);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(a[i][j]=='J')
sx=i,sy=j;
else if(a[i][j]=='F')
vis[i][j]=0,q1.push(pos(i,j,0));
bfs();
while(!q.empty())
q.pop();
q.push(pos(sx,sy,0));
while(!q.empty())
{
pos p=q.front();
q.pop();
int x=p.x,y=p.y;
if(x==1 || y==1 || x==n || y==m)
{
printf("%d\n",p.s+1);
return ;
}
if(b[x][y])
continue;
b[x][y]=1;
for(int i=0;i<4;i++)
{
int xx=x+nxt[i][0],yy=y+nxt[i][1];
if(xx<1 || xx>n || yy<1 || yy>m)
continue;
if(a[xx][yy]=='#' || (vis[xx][yy]!=-1 && vis[xx][yy]<=p.s+1))
continue;
q.push(pos(xx,yy,p.s+1));
}
}
puts("IMPOSSIBLE");
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
solve();
return 0;
}
2022春每日一题:Day 7的更多相关文章
- 【Java每日一题】20170106
20170105问题解析请点击今日问题下方的"[Java每日一题]20170106"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...
- 【Java每日一题】20170105
20170104问题解析请点击今日问题下方的"[Java每日一题]20170105"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...
- 【Java每日一题】20170104
20170103问题解析请点击今日问题下方的"[Java每日一题]20170104"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...
- 【Java每日一题】20170103
20161230问题解析请点击今日问题下方的"[Java每日一题]20170103"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...
- 【Java每日一题】20161230
// 20161229问题解析请点击今日问题下方的"[Java每日一题]20161230"查看(问题解析在公众号首发,公众号ID:weknow619)package Dec2016 ...
- 【Java每日一题】20161229
package Dec2016; import java.util.ArrayList; import java.util.List; public class Ques1229 { public s ...
- 【Java每日一题】20161228
package Dec2016; import java.util.ArrayList; import java.util.List; public class Ques1228 { public s ...
- 【Java每日一题】20161227
package Dec2016; public class Ques1227 { public static void main(String[] args){ } { c = 1; } int c ...
- 【Java每日一题】20161226
package Dec2016; public class Ques1226 { static{ num = 1; } public static int num = 2; public static ...
- 【Java每日一题】20161223
package Dec2016; public class Ques1223 { public static void main(String[] args){ Integer obj = Integ ...
随机推荐
- springboot拦截器总结
Springboot 拦截器总结 拦截器大体分为两类 : handlerInterceptor 和 methodInterceptor 而methodInterceptor 又有XML 配置方法 和A ...
- itoa与atoi函数
// 自己参考并编写的itoa与atoi函数 // 支持10进制整形,支持16进制整形,支持负数 // 20220228,修复负数字符字符串会转换成正数的bug#include <stdio.h ...
- ProxySQL(3):Admin管理接口
文章转载自:https://www.cnblogs.com/f-ck-need-u/p/9281199.html ProxySQL的Admin管理接口 当ProxySQL启动后,将监听两个端口: (1 ...
- 关于使用kuboard安装其自带的监控应用授权普通用户使用
官方文档地址:https://www.kuboard.cn/guide/example/monitor-v2.html#授权用户访问套件
- Elastic:Elastic部署架构介绍
Elastic Stack是一套完整的从数据采集,解析,分析,丰富,到搜索,检索,数据程序等一套完整的软件栈.在具体的实践中,我们应该如何搭建我们的系统呢? 下图描述了常用的Elastic Stack ...
- Lock 锁底层实现
★ 1.讲讲 Lock 锁 是一个接口,有三个实现类,分别是常用的 可重入锁,读锁.写锁.常用的是可重入锁. 加锁使用lock() 方法,解锁使用 unlock() 方法.Lock的底层是 AQS+C ...
- Java删除word合并单元格时的重复值
Spire.Doc提供了Table.applyVerticalMerge()方法来垂直合并word文档里面的表格单元格,Table.applyHorizontalMerge()方法来水平合并表格单元格 ...
- python-函数-统计函数
#(1)amax(),amin() 作用:计算数组中的元素沿指定轴的最大值,最小值 import numpy as np x = np.random.randint(1,11,9).reshape(( ...
- # 如何在Windows下运行Linux程序
如何在Windows下运行Linux程序 一.搭建 Linux 环境 1.1 安装 VMware Workstation https://www.aliyundrive.com/s/TvuMyFdTs ...
- 文盘Rust -- struct 中的生命周期
最近在用rust 写一个redis的数据校验工具.redis-rs中具备 redis::ConnectionLike trait,借助它可以较好的来抽象校验过程.在开发中,不免要定义struct 中的 ...