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 ...
随机推荐
- SpringMVC 04: SpringMVC中4种页面跳转方式
转发和重定向的页面跳转方式 页面跳转方式,本质上只有2种方式:转发 + 重定向 但在SpringMVC的具体实现上,转发可以细分为:普通的页面转发 + 经由action方法的页面转发 重定向可以细分为 ...
- 延宕执行,妙用无穷,Go lang1.18入门精炼教程,由白丁入鸿儒,Golang中defer关键字延迟调用机制使用EP17
先行定义,延后执行.不得不佩服Go lang设计者天才的设计,事实上,defer关键字就相当于Python中的try{ ...}except{ ...}finally{...}结构设计中的finall ...
- LVGL 入门使用教程
一.准备资料 开发板:ESP32-S3 开发环境:VS Code + PlatformIO 串口屏驱动 TFT-eSPI:https://github.com/Bodmer/TFT_eSPI 触摸驱动 ...
- 痞子衡嵌入式:理解i.MXRT中FlexSPI外设lookupTable里配置访问行列混合寻址Memory的参数值
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT中FlexSPI外设lookupTable里配置访问行列混合寻址Memory的参数值. 关于 FlexSPI 外设的 loo ...
- kali安装vscode(deb包)
如果在虚拟机下安装,则你可以在主机下载,然后复制到具有可读可写的文件夹,比如root用户的话就在/root下面 打开终端,切换到软件终端,输入安装命令dpkg -i code...按table键自动补 ...
- 利用Kafka的Assign模式实现超大群组(10万+)消息推送
引言 IM即时通信场景下,最重要的一个能力就是推送:在线的直接通过长连接网关服务转发,离线的通过APNS或者极光等系统进行推送. 本文主要是针对在线用户推送场景来进行总结和探讨:如何利用Kafka ...
- Prometheus 监控 Kubernetes Job 资源误报的坑
转载自:https://www.qikqiak.com/post/prometheus-monitor-k8s-job-trap/ 昨天在 Prometheus 课程辅导群里面有同学提到一个问题,是关 ...
- Form表单数据
官方文档地址:https://fastapi.tiangolo.com/zh/tutorial/request-forms/ 接收的不是 JSON,而是表单字段时,要使用 Form 要使用表单,需预先 ...
- suse 安装mysql5.7
1.上传包到home目录下 2.安装 1,解压下载的文件: tar -xvf mysql-5.7.29-1.sles12.x86_64.rpm-bundle.tar 解压后: 3.安装libatomi ...
- DirectX 使用 Vortice 从零开始控制台创建 Direct2D1 窗口修改颜色
本文将告诉大家如何使用 Vortice 底层库从零开始,从一个控制台项目,开始搭建一个最简单的使用 Direct2D1 的 DirectX 应用.本文属于入门级博客,期望本文能让大家了解 Vortic ...