(BFS)Meteor Shower (poj3669)

题目:

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

分析与解答:

这里没有给出图,而是通过一些数据让你先建一个图,map[i][j]存的是这个点的爆炸时间,我们初始化最大时间,然后输入数据是把这个数以及他上下左右四个方位全部的时间填上,这里可能会重复爆,我们写最早爆的时间,也就是最小的时间。
然后我们从(0,0)开始搜,bfs中先把(0,0)放入队列,然后只要队列不为空,就继续搜,先取出队首元素。由于如果某个点被炸掉,他就不可能停在该点,最终她停的点一定是没有被炸的那个点,也就是说如果队首元素的map值是我们一开始赋的值maxn,那我们就可以返回这个点的时间了。如果没返回,就继续上下左右遍历,更改点的坐标以及时间,如果这个点没出现过,而且他在第一象限,而且此时此刻的时间小于map里开始爆的时间,那就说明可以走这个点,就把这个点push到队列里,并做上标记

这个代码稍微改一点就wa,一次时main里那个t,不能写成map[i][j],还有一个是bfs里面参数的位置,稍微一改就错,具体错到哪我调试了两小时没调出来md以后干脆先建结点再判断吧,参数再for里for外if里if外这东西我头疼
代码参考:
https://blog.csdn.net/coraline_m/article/details/18035393

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
int maxn=10000;
int dir[4][2]={{-1,0},{1,0},{0,1},{0,-1}};
int mp[305][305];
int visi[305][305];
struct node
{int x,y,t;//坐标和时间 
};int bfs(int x,int y)//从00点开始 
{queue<node> mq;node nod; nod.x=x,nod.y=y,nod.t=0;mq.push(nod);while(!mq.empty()){int cx,cy,px,py,time;nod=mq.front();mq.pop();cx=nod.x,cy=nod.y,time=nod.t;if(mp[cx][cy]==maxn)//没有被炸掉 {//cout<<time<<endl;return time;}for(int i=0;i<4;i++)//(0,0)上下左右跑 {px=cx+dir[i][0],py=cy+dir[i][1];nod.x=px,nod.y=py,nod.t=time+1;if(px>=0&&py>=0&&!visi[px][py]&&nod.t<mp[px][py])//nod。t小于他说明可以走这个点 {visi[px][py]=1;mq.push(nod);}}}return -1;
}int main()
{int n,i,j;int x,y,tim,cx,cy;while(cin>>n){for(i=0;i<304;i++)for(j=0;j<304;j++)mp[i][j]=maxn;while(n--){scanf("%d%d%d",&x,&y,&tim);mp[x][y]=min(mp[x][y],tim);//mp存的是最早爆的时间 for(i=0;i<4;i++)// 他上下左右四个点位全爆掉 {cx=x+dir[i][0],cy=y+dir[i][1];if(cx>=0&&cy>=0)    mp[cx][cy]=min(mp[cx][cy],tim);//点在第一象限内 }}memset(visi,0,sizeof(visi));//初始化标志数组 visi[0][0]=1;int res=bfs(0,0);cout<<res<<endl;}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/560734.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java的整型_java 整型

byte(1字节)、short(2字节)、int(4字节)、long(16字节)java中前缀加上0b或者0b就可以写二进制数&#xff0c;前缀加上0就可以写八进制数&#xff0c;前缀加上0x或者0x就可以写十六进制数一个字节是8位&#xff0c;最高位是符号位&#xff0c;最高位为0则是正数。最高位为1则是负…

(二分+区间搜索 )Mountain Walking(poj2110/poj2922)

题目 农夫约翰和贝西牛已经开始了其中一个“积极”的假期。他们整天都在山里散步&#xff0c;然后在一天结束时&#xff0c;他们厌倦了回到度假小屋。 由于攀爬需要大量能量并且已经疲惫&#xff0c;他们希望使用其最高和最低高度之间的差异最小的路径返回到机舱&#xff0c;…

python自动化操作应用程序错误_web自动化中踩过的低级错误坑(python+selenium)

1.定位了元素没有做下一步操作&#xff0c;比如&#xff0c;点击、输入等功能&#xff0c;而报错&#xff0c;报错信息如下&#xff1a;2.上传图片时&#xff0c;定位元素&#xff0c;应该定位input标签&#xff0c;点击页面input标签肉眼没有看到定位到任何元素&#xff0c;以…

(全排列)Smallest Difference (poj2718)

题目&#xff1a; Description - 题目描述 给定若干位十进制数&#xff0c;你可以通过选择一个非空子集并以某种顺序构建一个数。剩余元素可以用相同规则构建第二个数。除非构造的数恰好为0&#xff0c;否则不能以0打头。 举例来说&#xff0c;给定数字0&#xff0c;1&#x…

qgis折点打断_arcgis在折点处打断并建立网络分析(最短路径等问题)

目的&#xff1a;GIS网络分析用于对段路径等问题。这里仅仅讲述如何建立网络分析。网络建立前必须满足以下条件1.要素文件在节点处打断(本文下面会叙述)2.要素文件在地理数据库里的数据集里(一般是这样)3.要素文件包含的数据集里已经验证拓扑&#xff0c;并确保没有错误(可选)注…

(bfs)连连看(hdu1175)

题目&#xff1a; “连连看”相信很多人都玩过。没玩过也没关系&#xff0c;下面我给大家介绍一下游戏规则&#xff1a;在一个棋盘中&#xff0c;放了很多的棋子。如果某两个相同的棋子&#xff0c;可以通过一条线连起来&#xff08;这条线不能经过其它棋子&#xff09;&#…

base64 java php_利用PHP将图片转换成base64编码的实现方法

先来说一下为什么我们要对图片base64编码base64是当前网络上最为常见的传输8Bit字节代码的编码方式其中之一。base64主要不是加密&#xff0c;它主要的用途是把某些二进制数转成普通字符用于网络传输。由于这些二进制字符在传输协议中属于控制字符&#xff0c;不能直接传送&…

(BFS)Knight Moves(hdu1372)

题目&#xff1a; 在象棋王国&#xff0c;尼古拉斯.火山是一匹英俊的马&#xff0c;他非常幸运迎娶了白马王国的公主&#xff0c;他们将度蜜月&#xff0c;你现在是他们的女仆&#xff0c;火山会问你去一些地方最少需要多少步&#xff0c;这么简单的事当然难不倒你。由于火山是…

java上机作业要注意什么_Java第八次上机作业

1、请按照以下要求设计一个学生类Student&#xff0c;并进行测试。要求如下&#xff1a;1)Student类中包含姓名、成绩两个属性2)分别给这两个属性定义两个方法&#xff0c;一个方法用于设置值&#xff0c;另一个方法用于获取值.3)Student类中定义一个无参的构造方法和一个接收两…

(枚举)餐厅点餐(fzu2086)

问题&#xff1a; Jack最近喜欢到学校餐厅吃饭&#xff0c;好吃干净还便宜。 在学校餐厅&#xff0c;有a种汤&#xff0c;b种饭&#xff0c;c种面条&#xff0c;d种荤菜&#xff0c;e种素菜。 为了保证膳食搭配&#xff0c;Jack每顿饭都会点1~2样荤菜&#xff0c;1~2样素菜&…

java代下订单管理模块_用java语言开发一个订单管理系统

管理员登陆窗体(LoginForm)&#xff1a;窗体中包含“管理员姓名”&#xff0c;“管理员密码”,按钮:"确定","取消"操作主窗体(MainFrame)&#xff1a;包括&#xff1a;1、一个Jtable用来显示数据库中Orders表(订单表)中的...管理员登陆窗体(LoginForm)&…

(并查集)畅通工程

题目 某省调查城镇交通状况&#xff0c;得到现有城镇道路统计表&#xff0c;表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通&#xff08;但不一定有直接的道路相连&#xff0c;只要互相间接通过道路可达即可&#xff09;。…

java windows 2008_Windows server 2008 R2 安装Java环境

一、配置环境操作系统软件包Windows server 2008 R2jdk_1.7.rar二、安装操作1.右击解压jdk_1.7.rar&#xff1b;解压后双击运行jdk-7u79-windows-i586 .exe2.点击【下一步】一直到有个【更改】按钮&#xff0c;可以更改安装路径&#xff0c;设置完成后点击“下一步”。到达这个…

(kruskal)还是畅通工程

题目&#xff1a; 某省调查乡村交通状况&#xff0c;得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通&#xff08;但不一定有直接的公路相连&#xff0c;只要能间接通过公路可达即可&#xff09;&#xff0c;并要…

java 匿名类型_Java之匿名类讲解

匿名类&#xff0c;正如名字一样在java中没有名字标识的类&#xff0c;当然了编译后还是会安排一个名字的。下面是一个关于匿名类的简单例子&#xff1a;public classClient {public static voidmain(String[] args) throws InterruptedException {Thread tnew Thread(newRunna…

(并查集)小希的迷宫

题目&#xff1a; 上次Gardon的迷宫城堡小希玩了很久&#xff08;见Problem B&#xff09;&#xff0c;现在她也想设计一个迷宫让Gardon来走。但是她设计迷宫的思路不一样&#xff0c;首先她认为所有的通道都应该是双向连通的&#xff0c;就是说如果有一个通道连通了房间A和B&…

java的三个环境变量是啥_JAVA中常用需要设置的三个环境变量(JAVA_HOME、CLASSPATH、PATH)...

JAVA中常用需要设置的三个环境变量:JAVA_HOME、CLASSPATH、PATH(一)  配置环境变量&#xff1a;(相对路径)1. JAVA_HOMEx:/jdk1.6.02. 用%JAVA_HOME%就可以取代:x:/jdk1.6.0这一部分CLASSPATH.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/activation.jar…

(并查集)The Suspects

题目 Severe acute respiratory syndrome (SARS), an atypical pneumonia of unknown aetiology, was recognized as a global threat in mid-March 2003. To minimize transmission to others, the best strategy is to separate the suspects from others. In the Not-Spre…

java字节流分为_Java文件流可分为字节流和字符流。

【单选题】TCP 和 UDP 协议的相似之处是 ()【单选题】That was the first time I ______ French with a foreigner.【判断题】【判断题】对互联网和搜索引擎的应用是奥巴马连续淘汰希拉里、麦凯恩等竞争对手的法宝之一。【单选题】friend意为“朋友”,请问,“友谊”如何表达?【…

(最小生成树)prim算法

总结一下&#xff1a; 如果选 0为起点&#xff0c;low_cost[i]表示以 0这个起点到i 这个终点的权值&#xff0c;我们找最小的权值的终点i&#xff0c;然后以i为起点&#xff0c;去更新low_cost[]这个数组&#xff0c;如果与i相连的数是j&#xff0c;现在有两种情况&#xff0c…