博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 3669 Meteor Shower【BFS】
阅读量:5287 次
发布时间:2019-06-14

本文共 1723 字,大约阅读时间需要 5 分钟。

去看流星雨,不料流星掉下来会砸毁上下左右中五个点。每个流星掉下的位置和时间都不同,求能否活命,如果能活命,最短的逃跑时间是多少?

思路:对流星雨排序,然后将地图的每个点的值设为该点最早被炸毁的时间

#include 
#include
#include
#include
using namespace std;#define INDEX_MAX 512int map[INDEX_MAX][INDEX_MAX];bool visited[INDEX_MAX][INDEX_MAX];struct Meteor{ int x, y, t;};typedef Meteor P;Meteor m[50008];int n;const int direction[5][2] = { { -1, 0 }, { 1, 0 }, { 0, -1 }, { 0, 1 }, { 0, 0 },};int last;int bfs(){ memset(visited, 0, sizeof(visited)); queue

que; P current; current.x = 0; current.y = 0; // 当前花费时间 current.t = 0; que.push(current); while (que.size()) { // 做个备份 const P p = que.front(); que.pop(); for (int j = 0; j < 4; ++j) { current = p; current.x = current.x + direction[j][0]; current.y = current.y + direction[j][1]; ++current.t; if (current.x >= 0 && current.y >= 0 && map[current.x][current.y] > current.t && !visited[current.x][current.y]) { visited[current.x][current.y] = true; // 爆炸时间大于当前时间,是安全的 if (map[current.x][current.y] > last) { // 当前位置爆炸时间大于流星雨最晚落下的时间,说明跑出了流星雨区域 return current.t; } que.push(current); } } } return -1;}int main(){ cin >> n; for (int i = 0; i < n; ++i) { cin >> m[i].x >> m[i].y >> m[i].t; } // 地图中每个点的值表示最早在什么时候被炸毁 memset(map, 0x7F, sizeof(map)); for (int i = 0; i < n; ++i) { last = max(last, m[i].t); for (int j = 0; j < 5; ++j) { int nx = m[i].x + direction[j][0]; int ny = m[i].y + direction[j][1]; if (nx >= 0 && ny >= 0 && map[nx][ny] > m[i].t) { map[nx][ny] = m[i].t; } } } if (map[0][0] == 0) { cout << -1 << endl; } else { cout << bfs() << endl; } return 0;}

转载于:https://www.cnblogs.com/demian/p/6152963.html

你可能感兴趣的文章
mongodb命令----批量更改文档字段名
查看>>
国外常见互联网盈利创新模式
查看>>
android:scaleType属性
查看>>
shell脚本
查看>>
Upload Image to .NET Core 2.1 API
查看>>
Linux中防火墙centos
查看>>
[JS]递归对象或数组
查看>>
linux sed命令
查看>>
程序存储问题
查看>>
优雅地书写回调——Promise
查看>>
PHP的配置
查看>>
Struts框架----进度1
查看>>
Round B APAC Test 2017
查看>>
MySQL 字符编码问题详细解释
查看>>
css & input type & search icon
查看>>
C# 强制关闭当前程序进程(完全Kill掉不留痕迹)
查看>>
语音识别中的MFCC的提取原理和MATLAB实现
查看>>
MetaWeblog API Test
查看>>
c# 文件笔记
查看>>
心得25--JDK新特性9-泛型1-加深介绍
查看>>