UVA11624_Fire!
2024-05-12 04:17:06
在一个矩形方阵里面,一个人要从一个位置走向另一个位置,其中某些地方有火源,每过一分钟,火源就会点燃相邻的点,同时相邻的点也变成了火源。人不能通过有火的点。问一个人能够安全地走到目的地去?最短时间多少?
氺题不多说,直接预处理每个点的起火时间,然后bfs即可。
召唤代码君:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
#define maxn 1010
using namespace std;char s[maxn][maxn];
int g[maxn][maxn];
int T,n,m;
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};bool inside(int cx,int cy)
{return cx>0 && cx<=n && cy>0 && cy<=m;
}bool border(int cx,int cy)
{return cx==1 || cx==n || cy==1 || cy==m;
}void init_fire()
{for (int i=1; i<=n; i++)for (int j=1; j<=m; j++) g[i][j]=99999999;queue<int> qx,qy;for (int i=1; i<=n; i++)for (int j=1; j<=m; j++)if (s[i][j]=='F') qx.push(i),qy.push(j),g[i][j]=0;while (!qx.empty()){int cx=qx.front(),cy=qy.front();qx.pop(),qy.pop();for (int i=0; i<4; i++){if (!inside(cx+dx[i],cy+dy[i])) continue;if (s[cx+dx[i]][cy+dy[i]]!='.') continue;if (g[cx][cy]+1>=g[cx+dx[i]][cy+dy[i]]) continue;g[cx+dx[i]][cy+dy[i]]=g[cx][cy]+1;qx.push(cx+dx[i]),qy.push(cy+dy[i]);}}
}int bfs()
{queue<int> qx,qy;for (int i=1; i<=n; i++)for (int j=1; j<=m; j++)if (s[i][j]=='J'){g[i][j]=0;qx.push(i),qy.push(j);if (border(i,j)) return 1;}while (!qx.empty()){int cx=qx.front(),cy=qy.front();qx.pop(),qy.pop();for (int i=0; i<4; i++){if (s[cx+dx[i]][cy+dy[i]]!='.') continue;if (g[cx][cy]+1>=g[cx+dx[i]][cy+dy[i]]) continue;if (border(cx+dx[i],cy+dy[i])) return g[cx][cy]+2;g[cx+dx[i]][cy+dy[i]]=g[cx][cy]+1;qx.push(cx+dx[i]),qy.push(cy+dy[i]);}}return -1;
}int main()
{scanf("%d",&T);while (T--){scanf("%d%d",&n,&m);for (int i=1; i<=n; i++) scanf("%s",s[i]+1);init_fire();int ans=bfs();if (ans==-1) puts("IMPOSSIBLE");else printf("%d\n",ans);}return 0;
}
转载于:https://www.cnblogs.com/lochan/p/3842425.html
UVA11624_Fire!相关推荐
最新文章
- リアルタイム3Dニャンニャン 汉化补丁
- sqlserver 指数_大盘指数大涨,牛市是否提前来了?
- imp-00017 oracle2298,急,imp怪異問題,請高手協助
- 敏捷开发产品管理系列之三:产品用户群规划
- bzoj 2437: [Noi2011]兔兔与蛋蛋
- 【AHOI2009】【BZOJ1798】Seq 维护序列seq(线段树模板,易错提醒)
- qregularexpression和qregexp的区别
- 关于用C#调用C++的dll中的函数,获取字符串返回值的一些细节
- M1芯片CAD如何安装?M1 mac怎么安装AutoCAD?
- stream流转toMap的使用以及Key重复的解决
- java hl7_java-发送HL7消息后何时关闭并重新打开套接...
- Android 各版本对应的SDK版本
- 第1195期机器学习日报(2017-12-26)
- JS之 获取日期方法
- 女生应该找一个会打DOTA的男生做老公
- MarkdownPad 2 安装配置及常见问题
- 七:Shell脚本:正则表达式与文本处理器三剑客grep,egrep, sed,awk
- Kibana 7.13.2 启动时报错 TaskManager is unable to start as there the Kibana UUID is invalid
- 苹果11怎样设置自动锁屏 iPhone11自动锁屏操作方法
- shell易错点整理