当前位置: 首页 > news >正文

题解:洛谷 P2895 [USACO08FEB] Meteor Shower S

【题目来源】

洛谷:[P2895 USACO08FEB] Meteor Shower S - 洛谷

【题目描述】

贝茜听说一场特别的流星雨即将到来:这些流星会撞向地球,并摧毁它们所撞击的任何东西。她为自己的安全感到焦虑,发誓要找到一个安全的地方(一个永远不会被流星摧毁的地方)。

如果将牧场放入一个直角坐标系中,贝茜现在的位置是原点,并且,贝茜不能踏上一块被流星砸过的土地。

根据预报,一共有 \(M\) 颗流星 \((1\le M\le 50,000)\) 会坠落在农场上,其中第 \(i\) 颗流星会在时刻 \(T_i(0\le T_i\le 1000)\) 砸在坐标为 \((X_i,Y_i)(0\le X_i\le 300,0\le Y_i\le 300)\) 的格子里。流星的力量会将它所在的格子,以及周围 \(4\) 个相邻的格子都化为焦土,当然贝茜也无法再在这些格子上行走。

贝茜在时刻 \(0\) 开始行动,她只能在第一象限中,平行于坐标轴行动,每 \(1\) 个时刻中,她能移动到相邻的(一般是 \(4\) 个)格子中的任意一个,当然目标格子要没有被烧焦才行。如果一个格子在时刻 \(t\) 被流星撞击或烧焦,那么贝茜只能在 \(t\) 之前的时刻在这个格子里出现。 贝茜一开始在 \((0,0)\)

请你计算一下,贝茜最少需要多少时间才能到达一个安全的格子。如果不可能到达输出 \(−1\)

【输入】

\(M+1\) 行,第 \(1\) 行输入一个整数 \(M\),接下来的 \(M\) 行每行输入三个整数分别为 \(X_i,Y_i,T_i\)

【输出】

贝茜到达安全地点所需的最短时间,如果不可能,则为 \(−1\)

【输入样例】

4
0 0 2
2 1 2
1 1 2
0 3 5

【输出样例】

5

【解题思路】

image

【算法标签】

《洛谷 P2895 流星雨》 #搜索# #广度优先搜索,BFS# #USACO# #2008#

【代码详解】

#include <bits/stdc++.h>
using namespace std;// 定义位置结构体
struct node
{int x, y;      // 坐标位置int step;      // 到达该位置的步数int t;         // 该位置变为危险的时间(-1表示安全)int visit;     // 是否已访问(1表示已访问)
} p[1005][1005];   // 定义1005x1005的网格int main()
{int m;  // 危险区域的数量cin >> m;int x, y, t;  // 临时变量:坐标和危险时间int tx, ty;   // 临时坐标// 方向数组:上、下、左、右、原地(用于标记危险区域)int dx[5] = {-1, 1, 0, 0, 0};int dy[5] = {0, 0, -1, 1, 0};// 初始化所有位置为未访问状态memset(p, -1, sizeof(p));// 初始化每个位置的坐标for (int i = 0; i <= 1000; i++){for (int j = 0; j <= 1000; j++){p[i][j].x = i;p[i][j].y = j;}}// 输入危险区域信息for (int i = 0; i < m; i++){cin >> x >> y >> t;// 标记该位置及其四周为危险区域for (int j = 0; j <= 4; j++){tx = x + dx[j];ty = y + dy[j];if (tx < 0 || ty < 0) continue;  // 超出边界则跳过// 如果该位置尚未标记危险时间,或者当前时间更早,则更新if (p[tx][ty].t == -1 || p[tx][ty].t > t){p[tx][ty].t = t;}}}// 使用BFS队列进行搜索queue<node> q;// 初始化起点(0,0)p[0][0].step = 0;    // 起点步数为0p[0][0].visit = 1;    // 标记为已访问q.push(p[0][0]);     // 加入队列// BFS主循环while (!q.empty()){node tp = q.front();q.pop();// 尝试四个移动方向for (int i = 0; i < 4; i++){tx = tp.x + dx[i];ty = tp.y + dy[i];// 检查边界和访问状态if (tx < 0 || ty < 0 || p[tx][ty].visit == 1){continue;}// 如果找到安全区域if (p[tx][ty].t == -1){cout << tp.step + 1;  // 输出当前步数+1return 0;}// 如果可以在危险时间前到达该位置if (p[tx][ty].t > tp.step + 1){p[tx][ty].visit = 1;            // 标记为已访问p[tx][ty].step = tp.step + 1;   // 更新步数q.push(p[tx][ty]);              // 加入队列}}}// 如果没有找到安全路径cout << -1 << endl;return 0;
}

【运行结果】

4
0 0 2
2 1 2
1 1 2
0 3 5
5
http://www.jsqmd.com/news/390111/

相关文章:

  • 题解:洛谷 P1433 吃奶酪
  • 2026年试验机实力厂家哪家值得选?热门排行公布,洛氏硬度计/电子万能材料测试机,试验机厂家推荐排行榜 - 品牌推荐师
  • 题解:洛谷 P1135 奇怪的电梯
  • 再论自然数全加和 - 角度和三角函数的本质
  • OpCore Simplify智能配置:黑苹果配置的自动化革命 - 指南
  • 2月17号
  • 题解:洛谷 P1219 [USACO1.5] 八皇后 Checker Challenge
  • 题解:洛谷 P1443 马的遍历
  • 【GitHub项目推荐--ORB-SLAM3:开源视觉、视觉惯性及多地图SLAM库】
  • 污水处理系统中组态王6.55与三菱PLC联机仿真OPC通讯优化之旅
  • Photoshop - Photoshop 工具栏(63)注释工具
  • 题解:洛谷 P3853 [TJOI2007] 路标设置
  • 静态无功补偿器(SVC)仿真模型 采用静态无功补偿器(SVC)对一个500kv, 3000mv...
  • 春晚机器人与中国未来100年发展
  • Photoshop - Photoshop 工具栏(64)计数工具
  • 题解:洛谷 P3743 小鸟的设备
  • 题解:洛谷 P2678 [NOIP 2015 提高组] 跳石头
  • 构建跨行业三维空间智能治理中枢——矩阵视频融合 × 三角测量 × 数字孪生驱动全域风险前置控制
  • 论文阅读:arxiv 2025 Jailbreaking Attacks vs. Content Safety Filters: How Far Are We in the LLM Safety Ar
  • 复杂场景三维空间主动风险防控与智能调度系统——基于矩阵视频融合的空间级安全感知底座技术白皮书
  • 题解:洛谷 P1163 银行贷款
  • 题解:洛谷 P1182 数列分段 Section II
  • 正规的美团礼品卡回收平台推荐 - 京顺回收
  • 题解:洛谷 P1873 [COCI 2011/2012 #5] EKO / 砍树
  • 题解:洛谷 P2440 木材加工
  • 【LeetCode 每日一题】3314. 构造最小位运算数组 I —— (解法二) - 详解
  • 题解:洛谷 P1102 A-B 数对
  • Smoke and Mirrors inspiration
  • 这个时间序列预测模型有点意思,直接上代码更直观。咱们先看看整个模型的架构长啥样
  • 题解:洛谷 P1678 烦恼的高考志愿