(BFS)poj3669-Meteor Shower
为判断某时刻能否走到某位置,建立shi数组,记录某位置最早t时刻就不能走。(初始化为-1)之后开始从(0,0)出发bfs,用bu数组记录走到某一位置时花费的步数,并且需要用vi数组记录是否走到过某个位置,不然慧反复走出错。注意可走的范围是第一象限,只是输入的陨石掉落位置是0——300。(之前因为这个判断位置是否合法WA了……)。
参考代码:
#include<cstdio>
#include<cstring>
#include<queue>
#include <iostream>
using namespace std;
int shi[][],m,bu[][],dir[][]={{,},{-,},{,},{,-}};
bool vi[][];
typedef pair<int ,int >P;
int si,sj,t;
int bfs()
{
queue<P> que;
P p;
que.push(P(,));
while(que.size())
{
p=que.front();
que.pop();
if(shi[p.first][p.second]==-)
return bu[p.first][p.second];
int i,xx,yy;
for(i=;i<;i++)
{
xx=p.first+dir[i][];
yy=p.second+dir[i][];
if(xx>=&&xx<=&&yy>=&&yy<=&&(shi[xx][yy]==-||bu[p.first][p.second]+<shi[xx][yy])&&!vi[xx][yy])
{
que.push(P(xx,yy));
bu[xx][yy]=bu[p.first][p.second]+;
vi[xx][yy]=true;
}
}
}
return -;
}
int main()
{
memset(shi,-,sizeof(shi));
memset(bu,,sizeof(bu));
memset(vi,false,sizeof(vi));
scanf("%d",&m);
int i,an;
while(m--)
{
scanf("%d%d%d",&si,&sj,&t);
if(shi[si][sj]==-||shi[si][sj]>t)
shi[si][sj]=t;
for(i=;i<;i++)
{
int xx,yy;
xx=si+dir[i][];
yy=sj+dir[i][];
if(xx>=&&xx<=&&yy>=&&yy<=&&(shi[xx][yy]>t||shi[xx][yy]==-))
shi[xx][yy]=t;
}
}
vi[][]=true;
an=bfs();
printf("%d\n",an);
return ;
}
(BFS)poj3669-Meteor Shower的更多相关文章
- poj3669 Meteor Shower(BFS)
题目链接:poj3669 Meteor Shower 我只想说这题WA了后去看讨论才发现的坑点,除了要注意原点外,流星范围题目给的是[0,300],到302的位置就绝对安全了... #include& ...
- 深搜(DFS)广搜(BFS)详解
图的深搜与广搜 一.介绍: p { margin-bottom: 0.25cm; direction: ltr; line-height: 120%; text-align: justify; orp ...
- 【算法导论】图的广度优先搜索遍历(BFS)
图的存储方法:邻接矩阵.邻接表 例如:有一个图如下所示(该图也作为程序的实例): 则上图用邻接矩阵可以表示为: 用邻接表可以表示如下: 邻接矩阵可以很容易的用二维数组表示,下面主要看看怎样构成邻接表: ...
- 深度优先搜索(DFS)与广度优先搜索(BFS)的Java实现
1.基础部分 在图中实现最基本的操作之一就是搜索从一个指定顶点可以到达哪些顶点,比如从武汉出发的高铁可以到达哪些城市,一些城市可以直达,一些城市不能直达.现在有一份全国高铁模拟图,要从某个城市(顶点) ...
- 【BZOJ5492】[HNOI2019]校园旅行(bfs)
[HNOI2019]校园旅行(bfs) 题面 洛谷 题解 首先考虑暴力做法怎么做. 把所有可行的二元组全部丢进队列里,每次两个点分别向两侧拓展一个同色点,然后更新可行的情况. 这样子的复杂度是\(O( ...
- 深度优先搜索(DFS)和广度优先搜索(BFS)
深度优先搜索(DFS) 广度优先搜索(BFS) 1.介绍 广度优先搜索(BFS)是图的另一种遍历方式,与DFS相对,是以广度优先进行搜索.简言之就是先访问图的顶点,然后广度优先访问其邻接点,然后再依次 ...
- 图的 储存 深度优先(DFS)广度优先(BFS)遍历
图遍历的概念: 从图中某顶点出发访遍图中每个顶点,且每个顶点仅访问一次,此过程称为图的遍历(Traversing Graph).图的遍历算法是求解图的连通性问题.拓扑排序和求关键路径等算法的基础.图的 ...
- 数据结构与算法之PHP用邻接表、邻接矩阵实现图的广度优先遍历(BFS)
一.基本思想 1)从图中的某个顶点V出发访问并记录: 2)依次访问V的所有邻接顶点: 3)分别从这些邻接点出发,依次访问它们的未被访问过的邻接点,直到图中所有已被访问过的顶点的邻接点都被访问到. 4) ...
- 层层递进——宽度优先搜索(BFS)
问题引入 我们接着上次“解救小哈”的问题继续探索,不过这次是用宽度优先搜索(BFS). 注:问题来源可以点击这里 http://www.cnblogs.com/OctoptusLian/p/74296 ...
- HDU.2612 Find a way (BFS)
HDU.2612 Find a way (BFS) 题意分析 圣诞节要到了,坤神和瑞瑞这对基佬想一起去召唤师大峡谷开开车.百度地图一下,发现周围的召唤师大峡谷还不少,这对基佬纠结着,该去哪一个...坤 ...
随机推荐
- 输入5至10之间的数字(用javaScript实现判断)
输入5至10之间的数字 ----用javaScript实现判断 代码如下: <!DOCTYPE html><html><body> <script>fu ...
- ubuntu gtk2.0 一个简单完整的窗口
//gtk_main();开了线程,关闭窗口并不能退出程序,需要手动添加 //gtk2.0,window quit compelete example #include <gtk/gtk.h&g ...
- 全面分析 Spring 的编程式事务管理及声明式事务管理
开始之前 关于本教程 本教程将深入讲解 Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务.通过对本教程的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之. 先决条件 本 ...
- linux文件系统,文件的分类
从硬盘的构造可知,每次对物理磁盘的访问的最小单位是一个盘面上的一个磁道的扇区,即使用户需要读取一个字节的数据,实际读写时都是先把该字节所在的扇区读读入到内存,然后再访问. 1.普通文件 2.目录文件 ...
- ASP.NET MVC 提示there was error getting the type的解决方法
在MVC中根据模型类创建控制器时提示there was error getting the type的原因是你新建的这个类模型文件后没有重新生成,先重新生成项目就可以添加控制器了.
- My Sql 中要Alter Table的同学请注意!!!
首先我建议你在对MySQL表做DDL操作时: 1 执行 show processlist 查看,要操作的表(数据库对象)是否处于锁状态 if("未锁定") { 执行DDL语句 }e ...
- File API 读取上传的文件
1, 在html 文档中,<input type="file"> 我们可以选择文件进行上传,但这时只能上传一个文件.如果加上multiple 属性,可以上传多个文件,上 ...
- miniui
//android提供了一个库minui用于简单的UI输出,源码在bootable/recovery/minui中, //gr_init()和gr_font_size()为minui库提供方法,gr_ ...
- FirstUniqueCharacterInString
Given a string, find the first non-repeating character in it and return it's index. If it doesn't ex ...
- union内嵌struct用法
// union内嵌struct用法 // 众所周知,union为联合体,struct为结构体.下面根据实例谈谈用法 #include <stdio.h> #include & ...