题目链接: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 ;
}

广搜最短路(最短时间到达目的地),POJ(3669)的更多相关文章

  1. poj 3278 Catch That Cow (广搜,简单)

    题目 以前做过,所以现在觉得很简单,需要剪枝,注意广搜的特性: 另外题目中,当人在牛的前方时,人只能后退. #define _CRT_SECURE_NO_WARNINGS //这是非一般的最短路,所以 ...

  2. hdu 1195 Open the Lock(广搜,简单)

    题目 猜密码,问最少操作多少次猜对,思路很简单的广搜,各种可能一个个列出来就可以了,可惜我写的很搓. 不过还是很开心,今天第一个一次过了的代码 #define _CRT_SECURE_NO_WARNI ...

  3. hdu 1175 连连看 (广搜,注意解题思维,简单)

    题目 解析见代码 #define _CRT_SECURE_NO_WARNINGS //这是非一般的最短路,所以广搜到的最短的路不一定是所要的路线 //所以应该把所有的路径都搜索出来,找到最短的转折数, ...

  4. 动态规划之DP中判断是否到达某一状态(最短时间是什么)?

    codevs1684 垃圾陷阱  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold   题目描述 Description 卡门——农夫约翰极其珍视的一条Holste ...

  5. luoguP4112 [HEOI2015]最短不公共子串 SAM,序列自动机,广搜BFS

    luoguP4112 [HEOI2015]最短不公共子串 链接 luogu loj 思路 子串可以用后缀自动机,子序列可以用序列自动机. 序列自动机是啥,就是能访问到所有子序列的自动机. 每个点记录下 ...

  6. PIGS POJ - 1149网络流(最短增广路---广搜) + 建图

    题意: 第一行输入m和n,m是猪圈的数量,n是顾客的数量,下面n行 第 i+1行表示第i个顾客 , 输入第一个数字表示有几把猪圈的钥匙,后面输入对应的猪圈,最后一个数字输入顾客想买几头猪. 建图: 设 ...

  7. Secret Milking Machine POJ - 2455 网络流(Dinic算法---广搜判断+深搜增广)+时间优化+二分

    题意: 第一行输入N M C ,表示从1到N有M条无向边,现在要从1走到N 走C次完全不同的路径,求最长边的最小值.下面M行是从a点到b点的距离. 建图: 题上说从两点之间可以有多条边,问的是从1~N ...

  8. hdu 1026:Ignatius and the Princess I(优先队列 + bfs广搜。ps:广搜AC,深搜超时,求助攻!)

    Ignatius and the Princess I Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

  9. hdu 1180:诡异的楼梯(BFS广搜)

    诡异的楼梯 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)Total Subm ...

随机推荐

  1. 第十章:DOM

    <div class="wrap"> <ul id="ul"> <li>01</li> <li>02 ...

  2. 关于element-ui表格样式设置的方法cell-class-name

    关于element-ui表格使用的一些方法 最近在用Vue.js和elment-ui做一个后台管理项目,不得不说element功能非常强大,提供了许多组件,基本可以满足一些基础的开发了.因为我做的后台 ...

  3. 研磨设计模式学习笔记3--适配器模式Adapter

    需求:制作一个日志管理系统,分为2个版本,第一版制作一个将日志存在本地文件的管理系统,第二版制作一个存储在数据库的管理系统,同时,第二版兼容第一版. 优点:可以复用现有功能,无需重新开发. 一.第一版 ...

  4. Dotfuscator 的使用方法

    打开Dotfuscator工具,选择“Create New Project” 在Input选项中选择需要混淆的文件 把 Disable String Encryption 设为 NO,即启用字符串加密 ...

  5. tomcat直接访问webinfo里的jsp

    <servlet> <servlet-name>requestScope.jsp</servlet-name> <jsp-file>/WEB-INF/r ...

  6. Java基础05-运算符

    1.赋值运算符:= 2.算术运算符: (1)一元运算符: i++;先使用后自身加1  int i=1;int b=i+1; b=1  i=2 ++i;先对自身加1后使用 int j=1;int b=+ ...

  7. 转:99%的人都理解错了HTTP中GET与POST的区别

    原贴来自:http://www.techweb.com.cn/network/system/2016-10-11/2407736.shtml GET和POST是HTTP请求的两种基本方法,要说它们的区 ...

  8. 硬盘和显卡的访问与控制(二)——《x86汇编语言:从实模式到保护模式》读书笔记02

    上一篇博文我们讲了如何看到实验结果,这篇博文我们着重分析源代码. 书中作者为了说明原理,约定了一种比较简单地用户程序头部格式,示意图如下(我参考原书图8-15绘制的,左边的数字表示偏移地址): 所以, ...

  9. Ubuntu环境下安装Bochs

    首先说一下我的Ubuntu版本,敲命令 sudo lsb_release -a 就可以看到 No LSB modules are available. Distributor ID: Ubuntu D ...

  10. HDU 5418——Victor and World——————【状态压缩+floyd】

    Victor and World Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/131072 K (Java/Other ...