题目链接:http://poj.org/problem?id=3669

解题报告:

1、流星坠落的点,四周和自己本身都被毁灭,不断更新每个点被毁灭的时候的最短时间。

2、搜索终点是,到达某个点,这个不会有流星毁灭他,即他的毁灭的时间大于最后一个流星到达时的时间。

#include <stdio.h>
#include <memory.h>
#include <queue>
using namespace std; #define MAX 302 ///地图宽度 int m; ///流星数
int map[MAX][MAX]; ///地图
bool visited[MAX][MAX]; ///是否访问过
int last; ///最晚的流星时间 int go[][] ={{,},{-,},{,},{,-},{,}}; ///五个方向 struct Meteor
{
int x;
int y;
int t;
}meteor[]; ///流星结构 typedef Meteor Node; ///节点结构,用于bfs int max(int a, int b)
{
return a > b ? a : b;
} int bfs()
{
memset(visited, false, sizeof(visited)); queue<Node> q; ///队列 Node fir; ///起始点入队
fir.x = fir.y = fir.t = ;
visited[][] = true; q.push(fir); while (!q.empty()) ///bfs
{
Node now = q.front();
q.pop(); for (int i = ; i < ; i++) ///每次必须行动1格
{
Node tmp = now;
tmp.x += go[i][];
tmp.y += go[i][];
tmp.t++; if (tmp.x >= && tmp.y >= && map[tmp.x][tmp.y]>tmp.t && !visited[tmp.x][tmp.y]) ///没越界、流星还未砸这个格子、还没访问过(重复访问就是不是bfs最优解了)
{
visited[tmp.x][tmp.y] = true; ///标记
if (map[tmp.x][tmp.y] > last) ///如果格子不会被砸到
{
return tmp.t;
}
q.push(tmp);
}
}
}
return -;
} int main()
{
while (scanf("%d", &m) != EOF)
{
for (int i = ; i < m; i++)
{
scanf("%d%d%d", &meteor[i].x, &meteor[i].y, &meteor[i].t);
} memset(map, 0x7f, sizeof(map)); ///要严谨一点可以用0x7fffffff,不过就不能用memset了
for (int i = ; i < m; i++)
{
///计算最晚流星的时间
if (i == )
last = meteor[i].t;
else
last = max(last, meteor[i].t); ///更新地图上某个点的最快的流星下落时间
for (int j = ; j < ; j++)
{
int tx = meteor[i].x + go[j][];
int ty = meteor[i].y + go[j][]; if (tx >= && ty >= && map[tx][ty]>meteor[i].t)
{
map[tx][ty] = meteor[i].t;
}
}
} if (map[][] == ) ///起始点被砸直接gg
printf("-1\n");
else ///否则bfs
printf("%d\n", bfs());
}
return ;
}

最新文章

  1. npm提速
  2. kali 下文件操作
  3. Semaphore用法
  4. C语言知识整理(3):内存管理(详细版)
  5. 搭建EF6.0+MVC4搭建框架——之路由配置
  6. 洛谷P1207 [USACO1.2]双重回文数 Dual Palindromes
  7. boost之function
  8. 信号量的操作——semop函数
  9. 关于npoi不能导入07以上版本的Excel
  10. createElement()结合appendChild()的实例
  11. C++中加const与不加const的区别
  12. 织梦DedeCMS v5.7 实现导航条下拉菜单
  13. iOS开发基础之设置状态栏和二维码的unspported type found 问题
  14. JSP页面静态包含和动态包含的区别与联系
  15. SecureCRT 设置彩色和显示中文
  16. [dubbo] Dubbo API 笔记——配置参考
  17. HTTP进阶学习笔记
  18. PHP:第三章——PHP中的递归函数
  19. archdexls主题游戏页面game-play.php有评论时,报错( ! ) Warning: printf(): Too few arguments in D:\wamp\www\wp-content\themes\arcadexls\games-play.php on line 97
  20. 【LeetCode】85. Maximal Rectangle

热门文章

  1. 安装pyautogui时报错备注
  2. AsyncLocal 与 ThreadLocal ThreadStatic特性简介
  3. MySQL之prepare用法
  4. windows远程xshell文件上传下载:
  5. python : No such file or directory
  6. my10_使用binlog2sql闪回DML操作
  7. Webstrom 中写Vue没有代码提示如何解决?
  8. 几种IO情况的学习和总结 关于 =====阻塞/非阻塞以及同步/异步区别
  9. java多线程(二)
  10. express --- session详解