poj3669 Meteor Shower (宽度优先搜索)
Description - 题目描述
Bessie听说有场史无前例的流星雨即将来临;有谶言:陨星将落,徒留灰烬。为保生机,她誓将找寻安全之所(永避星坠之地)。目前她正在平面坐标系的原点放牧,打算在群星断其生路前转移至安全地点。
此次共有M (1 ≤ M ≤ 50,000)颗流星来袭,流星i将在时间点Ti (0 ≤ Ti ≤ 1,000) 袭击点 (Xi, Yi) (0 ≤ Xi ≤ 300; 0 ≤ Yi ≤ 300)。每颗流星都将摧毁落点及其相邻四点的区域。
Bessie在0时刻时处于原点,且只能行于第一象限,以平行与坐标轴每秒一个单位长度的速度奔走于未被毁坏的相邻(通常为4)点上。在某点被摧毁的刹那及其往后的时刻,她都无法进入该点。
寻找Bessie到达安全地点所需的最短时间。
Input - 输入
- 第1行: 一个整数: M
- 第2..M+1行: 第i+1行包含由空格分隔的三个整数: Xi, Yi, and Ti
Output - 输出 - 仅一行: Bessie寻得安全点所花费的最短时间,无解则为-1。
Sample Input - 输入样例
4
0 0 2
2 1 2
1 1 2
0 3 5
Sample Output - 输出样例
5
AC代码:
include
include
include
include
include
using namespace std;
int a[310][310]; //标记每个点的状态,刚开始初始化后上面的数字代表最早在第几秒该点就已不安全
int M,j,plug=0,d[][2]={{0,1},{0,-1},{1,0},{-1,0},{0,0}}; //在初始化a[][]数组与每次移动的情况这两种情况时使用
struct node {
int x,y,t;
}s[50005];
struct noded {
int x1,y1,len;
};
queuequ;
void init(int x,int y,int m);
int cmp(const node &a,const node &b);
int bfs(){
while(!qu.empty()){
struct noded e=qu.front();
qu.pop();
for(int i=0;i<4;i++){
int nx=e.x1+d[i][0],ny=e.y1+d[i][1];
if(nx<0||ny<0) continue;
if(a[nx][ny]==-1) {
printf("%d\n",e.len+1);
return 0;
}
if(a[nx][ny]>e.len+1) {
a[nx][ny]=e.len+1; //这一步很重要,没有则是超时,有的话时间可以控制在100ms左右,这一步的意义就是走过的不再重复的走
struct noded f;
f.x1=nx,f.y1=ny,f.len=e.len+1;
qu.push(f);
}
}
}
printf("-1\n");
}
int main(){
cin>>M;
memset(a,-1,sizeof(a)); //初始化为-1,在输入数据之后若仍未-1,则该点为安全点
for(int i=0;i<M;i++){
scanf("%d%d%d",&s[i].x,&s[i].y,&s[i].t);
init(s[i].x,s[i].y,s[i].t); //五个位置不再是绝对安全
}
sort(s,s+M,cmp); //对其进行排序,方便bfs一步一步执行
struct noded e;
e.x1=0,e.y1=0,e.len=0;
qu.push(e);
bfs();
return 0;
}
void init(int x,int y,int m){ //初始化五个点不再绝对安全
for(int i=0;i<5;i++){
int nx=x+d[i][0],ny=y+d[i][1];
if(nx>=0&&ny>=0&&nx<=300&&ny<=300){
if(a[nx][ny]==-1) a[nx][ny]=m;
else a[nx][ny]=min(m,a[nx][ny]);
}
else continue;
}
}
int cmp(const node &a,const node &b){ //sort()比较函数
return a.t<b.t;
}
poj3669 Meteor Shower (宽度优先搜索)的更多相关文章
- 挑战程序2.1.5 穷竭搜索>>宽度优先搜索
先对比一下DFS和BFS 深度优先搜索DFS 宽度优先搜索BFS 明显可以看出搜索顺序不同. DFS是搜索单条路径到 ...
- poj3669 Meteor Shower(BFS)
题目链接:poj3669 Meteor Shower 我只想说这题WA了后去看讨论才发现的坑点,除了要注意原点外,流星范围题目给的是[0,300],到302的位置就绝对安全了... #include& ...
- 【算法入门】广度/宽度优先搜索(BFS)
广度/宽度优先搜索(BFS) [算法入门] 1.前言 广度优先搜索(也称宽度优先搜索,缩写BFS,以下采用广度来描述)是连通图的一种遍历策略.因为它的思想是从一个顶点V0开始,辐射状地优先遍历其周围较 ...
- [宽度优先搜索] FZU-2150 Fire Game
Fat brother and Maze are playing a kind of special (hentai) game on an N*M board (N rows, M columns) ...
- 【BFS宽度优先搜索】
一.求所有顶点到s顶点的最小步数 //BFS宽度优先搜索 #include<iostream> using namespace std; #include<queue> # ...
- 层层递进——宽度优先搜索(BFS)
问题引入 我们接着上次“解救小哈”的问题继续探索,不过这次是用宽度优先搜索(BFS). 注:问题来源可以点击这里 http://www.cnblogs.com/OctoptusLian/p/74296 ...
- BFS算法的优化 双向宽度优先搜索
双向宽度优先搜索 (Bidirectional BFS) 算法适用于如下的场景: 无向图 所有边的长度都为 1 或者长度都一样 同时给出了起点和终点 以上 3 个条件都满足的时候,可以使用双向宽度优先 ...
- 宽度优先搜索--------迷宫的最短路径问题(dfs)
宽度优先搜索运用了队列(queue)在unility头文件中 源代码 #include<iostream>#include<cstdio>#include<queue&g ...
- 算法基础⑦搜索与图论--BFS(宽度优先搜索)
宽度优先搜索(BFS) #include<cstdio> #include<cstring> #include<iostream> #include<algo ...
随机推荐
- java变量的类型
变量的类型 一 按数据类型分: 1.基本数据类型 : 整型 : byte (1字节 - (-128 ~ 127)) short (2字节) int (4字节) long (8字节) 浮点型 : ...
- 饿了吗开源组件库Element模拟购物车系统
传统的用html+jquery来实现购物车系统要非常的复杂,但是购物车系统完全是一个数据驱动的系统,因此采用诸如Vue.js.angular.js这些框架要简单的多.饿了吗开源的组件库Element是 ...
- 3.Golang的包导入
1.golang的源码文件可以随意命名,但是属于同一个包的源文件必须声明 package base 2.golang的包引入规则 import ( "fmt" #系统包直接写名字 ...
- POJ-2528 Mayor's posters (离散化, 线段树)
题目传送门: POJ-2528 题意就是在一个高度固定的墙面上贴高度相同宽度不同的海报,问贴到最后还能看到几张?本质上是线段树区间更新问题,但是要注意的是题中所给数据范围庞大,直接搞肯定会搞出问题,所 ...
- JVM(19)之 Class文件常量池
开发十年,就只剩下这套架构体系了! >>> 在上一博文Class文件中,我们了解了Class文件的一些基础知识.他的整个内部结构就是一张很大的表,我们就是从这张表入手,一一分析每 ...
- JavaScript、ES6中的类的继承
类的继承 extends connstructor super 例1: class Father { constructor(){} money(){ console.log("1000 ...
- Vue 实现文件的下载
上次说了,实现文件的上传需要三步,那么实现文件的下载呢? 答:也是三步 第一步:获取文件的 fileId (或者别的什么的,总之应该是代表这个文件的东西),各家后台需要的都不一样 第二步:调用接口 t ...
- 安装FaaS
[root@localhost ~]# [root@localhost ~]# new OS:centos-7 [root@localhost ~]# [root@localhost ~]# vim ...
- Java List 类型转换
java的类型转换让人忍不住在开始编码前骂一声 FUCK! 1 子类转父类 up List<SubClass> subs = ...; List<? extends BaseCl ...
- 【LGR-062】洛谷10月月赛 III div.2 (A-C)
前言 100+100+46+0=246pts 300多名 以后每次比赛都要有进步哦!qwq 小D与笔试 水题 Code #include<algorithm> #include<io ...