poj3669
一、题意:流星雨来袭击我们的女主,Bessie。为了找一个安全地方,她开始逃了。地图相当于平面坐标系第一象限,Bessie一开始在原点。然后,每颗流星都会在某个时刻砸下来,砸到的地方连同上下左右都会被毁灭,此时这些地方Bessie就不能通过了,她只能走其它地方。Bessie的移动速度是每时刻移动一步,上下左右,不能对角线移动。现在求Bessie最小的移动步数。
二、思路:先将会被毁灭的坐标点标记上被毁灭的时间,然后bfs,当到达该坐标的步数小于被毁灭的时间时可走,直到找到第一个不会被毁灭的坐标为止。这里需要注意的一个点就是当时间Ti==0时的情况。
三、代码:
#include"iostream"
#include"stdio.h"
#include"string.h"
#include"queue"
using namespace std; typedef pair<int,int> P;
const int MAXN=305; int coordinate[MAXN][MAXN];
int dist[MAXN][MAXN]; void CoordinateChange(int x,int y,int time)
{
if(coordinate[x][y]>time||coordinate[x][y]==-1)
coordinate[x][y]=time;
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0}; for(int i=0;i<4;i++)
{
int nx=x+dx[i];
int ny=y+dy[i]; if(nx>=0&&ny>=0)
if(coordinate[nx][ny]>time||coordinate[nx][ny]==-1)
coordinate[nx][ny]=time;
}
} bool Judge(int x,int y,int d)
{
if(x>=0&&y>=0&&(coordinate[x][y]==-1||d<coordinate[x][y])&&dist[x][y]==-1)
return true;
return false;
} int Bfs()
{
queue<P> que;
que.push(P(0,0)); while(que.size())
{
P p=que.front();que.pop(); if(coordinate[p.first][p.second]==-1)
return dist[p.first][p.second];
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0}; for(int i=0;i<4;i++)
{
int nx=p.first+dx[i];
int ny=p.second+dy[i]; if(Judge(nx,ny,dist[p.first][p.second]+1))
{
dist[nx][ny]=dist[p.first][p.second]+1;
que.push(P(nx,ny));
}
}
}
return -1;
} int main()
{
// freopen("in.txt","r",stdin);
int m,x,y,time;
while(scanf("%d",&m)==1)
{
memset(coordinate,-1,sizeof(coordinate));
memset(dist,-1,sizeof(dist)); for(int i=0;i<m;i++)
{
cin>>x>>y>>time;
CoordinateChange(x,y,time);
}
/*
for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
cout<<coordinate[i][j]<<' ';
cout<<endl;
}
*/
dist[0][0]=0;
cout<<Bfs()<<endl;
/*
for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
cout<<dist[i][j]<<' ';
cout<<endl;
}
*/
}
return 0;
}
poj3669的更多相关文章
- poj3669 Meteor Shower(BFS)
题目链接:poj3669 Meteor Shower 我只想说这题WA了后去看讨论才发现的坑点,除了要注意原点外,流星范围题目给的是[0,300],到302的位置就绝对安全了... #include& ...
- poj3669 Meteor Shower(预处理+bfs)
https://vjudge.net/problem/POJ-3669 先给地图a[][]预处理每个位置被砸的最小时间.然后再bfs. 纯bfs,还被cin卡了下时间.. #include<io ...
- 《挑战程序设计竞赛》2.1 广度优先搜索 AOJ0558 POJ3669 AOJ0121
AOJ0558 原文链接: AOJ0558 题意: 在H * W的地图上有N个奶酪工厂,分别生产硬度为1-N的奶酪.有一只吃货老鼠准备从老鼠洞出发吃遍每一个工厂的奶酪.老鼠有一个体力值,初始时为1,每 ...
- POJ-3669 Meteor Shower---BFS+预处理
题目链接: https://vjudge.net/problem/POJ-3669 题目大意: 巨大流星雨即将袭来.每个流星会对击中的地方以及周围(上下左右四格)造成破坏.Bessie开始时位于(0, ...
- POJ-3669 Meteor Shower(bfs)
http://poj.org/problem?id=3669 注意理解题意:有m颗行星将会落在方格中(第一象限),第i颗行星在ti时间会摧毁(xi,yi)这个点和四周相邻的点,一个人开始在原点,然后只 ...
- POJ3669(Meteor Shower)(bfs求最短路)
Meteor Shower Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12642 Accepted: 3414 De ...
- POJ3669解题报告(bfs)
POJ3669http://poj.org/problem?id=3669 很明显是一道bfs的题目 由于陨石的降临具有时刻性,所以地图是随时间变化的, 所以可以使用结构体来存储陨石下落的时刻以及位置 ...
- 【搜索】POJ-3669 BFS
一.题目 Description Bessie hears that an extraordinary meteor shower is coming; reports say that these ...
- POJ-3669
Meteor Shower Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 21055 Accepted: 5499 De ...
随机推荐
- c# 导入c++ dll
1.类的函数的内联实现 #include "stdafx.h" #include "testdll.h" #include <iostream> # ...
- [GO]冒泡排序的原理和代码实现
冒泡排序的原理:对于一个数组里所有的元素进行两两比较,发生大于则变换数组下标则为升序排序,发生小于则变换数据下标的则为降序排序 比如给定的数组为[1, -2, 3, -4],对于我们的需求,两两比较后 ...
- Linux下面rpm命令和mount命令详解
在Linux下面我们经常会安装一些软件包,还有挂载命令.接下来,我们通过一些实例来演示这些命令的使用.. 第一步:我们先在linux下面挂载光盘,先进入到根目录,然后切换到根下面的/mnt目录,因为/ ...
- EasyUI combobox实现下拉框多选遇坑记录
场景一: 多选正常从第二个选项增加逗号,我选第一个的时候就冒出一个逗号 解决方案一: 这是因为当前的下拉框的值可能为undefined,需要手动清空一下 $("#id").comb ...
- 浅谈短视频APP的发展趋势
2014年6月20日,在AppAnnie最新发布5月应用指数中,美拍荣登“非游戏类iOS榜单”全球下载量第一位置,成为全球iOS应用商店最热门APP.能在<AppAnnie应用指数>这份A ...
- JS判断键盘是否按的回车键并触发指定按钮点击操作
document.onkeydown = function (e) { if (!e) e = window.event; if ((e.keyCode || e.which) == 13) { va ...
- Windows下查看进程状态/信息
任务管理器 tasklist pslist(https://docs.microsoft.com/en-us/sysinternals/downloads/pslist) Process Explor ...
- 洛谷P2762 太空飞行计划问题(最小割)
传送门 我们可以把实验放在左边,仪器放在右边,点有点权,然后连对应的有向边,就是求一个最大权闭合图,可以转化为最小割来做(关于这具体是个啥……可以百度胡伯涛<最小割模型在信息学竞赛中的应用> ...
- apache2.4配置
首先修改httpd.conf配置文件. vim conf/httpd.conf 添加: Listen 1234 然后把 # Virtual hosts #Include conf/extra/ ...
- Python获取网页Html文本
Python爬虫基础 1.获取网页文本 通过urllib2包,根据url获取网页的html文本内容并返回 #coding:utf-8 import requests, json, time, re, ...