poj3669

news/2024/12/22 12:23:51/

题意:巨大流星雨即将袭来。每个流星会对击中的地方以及周围(上下左右四格)造成破坏。Bessie开始时位于(0, 0)位置,并希望逃到一处不会被袭击到的地方(在第一象限内)。已知每移动一格需要1个时间单位,被流星破坏后的地方不能再进入。给出M个流星在T时刻击中的地方(X, Y),问Bessie能否逃到安全的地方,若能输出最短时间,否则输出-1。

分析:依旧是迷宫问题。不同的是,需要自己构建出迷宫。首先将maze的所有格初始化为INF,表示这个格子被袭击的时间为INF(即永远不会被袭击)。对于每一个流星,将其影响反映到maze上,如果破坏范围由重叠,那么格子显示的是较早的破坏时间(因为一旦破坏了就不能进入),即maze[x][y] = min(maze[x][y], T)。迷宫构建起来后,回到问题本身。求最短时间,可以用BFS做到。使用d[x]][y] 来保存移动到该格时的最小时间。而对于约束条件,就是对于下一步能否移动到该地方,要看下一个时刻该地方是否会被破坏,若不会则可以,即可d[x][y] + 1 < maze[x][y]。另外,需要特别注意的是,若有流星在0时刻袭击(0, 0)位置,则无法逃生。

注意:不要走回头路,回头就会超时。因为没必要,不重复经过肯定逼重复经过更优。

#include <iostream>
#include <queue>
#include <cstdio>
#include <algorithm>using namespace std;typedef pair<int, int> P;const int MAX_M = 500005;
const int MAX_X_Y = 405;
const int INF = 10000;int m;
int x[MAX_M], y[MAX_M], t[MAX_M];int maze[MAX_X_Y][MAX_X_Y], d[MAX_X_Y][MAX_X_Y];const int dx[4] = {-1, 1, 0, 0};
const int dy[4] = {0, 0, -1, 1};int dfs() {if(maze[0][0] == 0) return -1;queue<P> que;que.push(P(0, 0));d[0][0] = 0;while(!que.empty()) {P p = que.front();que.pop();int x = p.first;int y = p.second;if(maze[x][y] == INF) return d[x][y];for(int i=0; i<4; i++) {int nx = x + dx[i];int ny = y + dy[i];//没有超出范围、没有走过这个格子、这个格子还没有被炸 if(0<=nx && nx<MAX_X_Y && 0<=ny && ny<=MAX_X_Y && d[nx][ny]==INF && d[x][y]+1<maze[nx][ny]) {que.push(P(nx, ny));d[nx][ny] = d[x][y] + 1;}}}return -1;
}void solve() {for(int i=0; i<MAX_X_Y; i++) {fill(maze[i], maze[i]+MAX_X_Y, INF);fill(d[i], d[i]+MAX_X_Y, INF);  }for(int i=0; i<m; i++) {maze[x[i]][y[i]] = min(maze[x[i]][y[i]], t[i]);for(int j=0; j<4; j++) {int nx = x[i] + dx[j];int ny = y[i] + dy[j];if(0<=nx && nx<MAX_X_Y && 0<=ny && ny<=MAX_X_Y)maze[nx][ny] = min(maze[nx][ny], t[i]);}}printf("%d\n", dfs());
}int main() {freopen("in.txt", "r", stdin);scanf("%d", &m);for(int i=0; i<m; i++)scanf("%d %d %d", &x[i], &y[i], &t[i]);solve();fclose(stdin);return 0;
}

转载于:https://www.cnblogs.com/StevenL/p/6818300.html


http://www.ppmy.cn/news/131387.html

相关文章

bzoj3669

对于这道题的解法&#xff0c;感觉是部分暴力&#xff0c;枚举带几只A型守护精灵&#xff0c;就可以将这道题转化成求类似于bzoj2594了。 参考题解&#xff1a; http://wenku.baidu.com/view/a611cec4dd3383c4bb4cd2d8.html http://www.cnblogs.com/JoeFan/p/4451249.html 找错…

poj 3669

bfs的题 因为每次都模拟流行砸下来&#xff0c;tle一次&#xff0c;&#xff08;应该标记每个点被砸的时间&#xff09; 因为没有标记走过的点不能再走&#xff0c;tle了一次&#xff0c;&#xff08;之前认为走过的点应该可以再走&#xff0c;其实仔细想的话&#xff0c;走过的…

ORACLE ASM常用命令整理

ASM 命令整理 一. 查看ASM空间使用情况 1. lsdg: 查看磁盘组的信息&#xff0c;和磁盘空间大小 ASMCMD> lsdg State Type Rebal Block AU Total_MB Free_MB Usable_file_MB Offline_disks Voting_files Name MOUNTED EXTERN N 4096 1048576 …

POJ-3669广度优先搜索

这是一道典型的广度优先搜索BFS题目。 首先声明一下&#xff0c;我在这里借鉴了别人的想法&#xff1a;这是原文答案&#xff0c;请点击 题目大意&#xff1a; 流星雨即将攻击地球&#xff0c;当然数目是有限的&#xff0c;共n个&#xff0c;攻击到某个点时将会使该点及其上…

POJ 3669(优先队列BFS)(对地图进行优化)

题目新颖&#xff0c;解法也是比较难想的。 题目&#xff1a; Bessie听说有场史无前例的流星雨即将来临&#xff1b;有谶言&#xff1a;陨星将落&#xff0c;徒留灰烬。为保生机&#xff0c;她誓将找寻安全之所&#xff08;永避星坠之地&#xff09;。目前她正在平面坐标系的…

“3.15”十五个行业大调查:谁在侵害消费者权益?

疫情之后消费复苏&#xff0c;“烟火人间“回归日常。 但是&#xff0c;部分行业的繁华羽翼之下却暗藏斑点&#xff0c;侵害消费者权益的各种乱象丛生&#xff1a; 新餐饮经营异常&#xff0c;食材口感与消费者期望严重不符&#xff1b;厨房小家电价格飘忽不定&#xff0c;参数…

苹果二手报价及图片大全

苹果二手价格一直很多人关注&#xff0c;下面给大家看看最新的二手苹果手机价格。&#xff08;数据来源&#xff1a;换换二手交易平台&#xff09;

最新苹果二手报价单(2022.2.15)

2022.2.15换换回收iPhone苹果二手机报价单(按照内存、靓机、小花、大花、花机四个等级进行报价)如下所示