题目: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的更多相关文章

  1. 【Java每日一题】20170106

    20170105问题解析请点击今日问题下方的"[Java每日一题]20170106"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...

  2. 【Java每日一题】20170105

    20170104问题解析请点击今日问题下方的"[Java每日一题]20170105"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...

  3. 【Java每日一题】20170104

    20170103问题解析请点击今日问题下方的"[Java每日一题]20170104"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...

  4. 【Java每日一题】20170103

    20161230问题解析请点击今日问题下方的"[Java每日一题]20170103"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...

  5. 【Java每日一题】20161230

    // 20161229问题解析请点击今日问题下方的"[Java每日一题]20161230"查看(问题解析在公众号首发,公众号ID:weknow619)package Dec2016 ...

  6. 【Java每日一题】20161229

    package Dec2016; import java.util.ArrayList; import java.util.List; public class Ques1229 { public s ...

  7. 【Java每日一题】20161228

    package Dec2016; import java.util.ArrayList; import java.util.List; public class Ques1228 { public s ...

  8. 【Java每日一题】20161227

    package Dec2016; public class Ques1227 { public static void main(String[] args){ } { c = 1; } int c ...

  9. 【Java每日一题】20161226

    package Dec2016; public class Ques1226 { static{ num = 1; } public static int num = 2; public static ...

  10. 【Java每日一题】20161223

    package Dec2016; public class Ques1223 { public static void main(String[] args){ Integer obj = Integ ...

随机推荐

  1. LibreCAD常用命令

    目录 常见命令 常见命令 .text_center { text-align: center } \3cp>.text_left { } 动作命令 命令 绘制直线 相对坐标系 @长度<角度 ...

  2. Homework6

    1.问:阅读和了解什么是形式化方法? 答:形式化方法在逻辑科学中是指分析.研究思维形式结构的方法.是把各种具有不同内容的思维形式(主要是命题和推理)加以比较,找出各个部分相互联结的方式,抽取出共同的形 ...

  3. 集成 Redis & 异步任务 - SpringBoot 2.7 .2实战基础

    SpringBoot 2.7 .2实战基础 - 09 - 集成 Redis & 异步任务 1 集成Redis <docker 安装 MySQL 和 Redis>一文已介绍如何在 D ...

  4. KingbaseES 匿名块如何传递参数

    匿名块的基本语法结构包括声明和执行两部分.匿名块每次提交都被重新编译和执行.因为匿名块没有名称并不在数据库中存储,所以匿名块不能直接从其他PL/SQL 块中调用. 定义语法: [ DECLARE ] ...

  5. java 验证手机号是否合法

    一.通用工具类编写 /** * @project * @Description * @Author songwp * @Date 2022/9/15 17:06 * @Version 1.0.0 ** ...

  6. Django 之必知必会三板斧

    一.HttpResponse 在django.http 模块中定义了HttpResponse 对象的API,HttpRequest 对象由Django 自动创建,不调用模板,直接返回数据. 1 在 a ...

  7. day03-代码实现02

    多用户即时通讯系统03 4.编码实现02 4.2功能实现-拉取在线用户 4.2.1思路分析 客户端想要知道在线用户列表,就要向服务器发送请求(Message),因为只有服务器端保持着所有与客户端相连接 ...

  8. 视频结构化 AI 推理流程

    「视频结构化」是一种 AI 落地的工程化实现,目的是把 AI 模型推理流程能够一般化.它输入视频,输出结构化数据,将结果给到业务系统去形成某些行业的解决方案. 换个角度,如果你想用摄像头来实现某些智能 ...

  9. Pod原理

    Pod 是 Kubernetes 集群中最基本的调度单元,我们平时在集群中部署的应用都是以 Pod 为单位的,而并不是我们熟知的容器,这样设计的目的是什么呢?为何不直接使用容器呢? 为什么需要 Pod ...

  10. CentOS7使用yum方式安装Containerd

    # 安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的 yum install -y yum-utils device-m ...