一、题意:流星雨来袭击我们的女主,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的更多相关文章

  1. poj3669 Meteor Shower(BFS)

    题目链接:poj3669 Meteor Shower 我只想说这题WA了后去看讨论才发现的坑点,除了要注意原点外,流星范围题目给的是[0,300],到302的位置就绝对安全了... #include& ...

  2. poj3669 Meteor Shower(预处理+bfs)

    https://vjudge.net/problem/POJ-3669 先给地图a[][]预处理每个位置被砸的最小时间.然后再bfs. 纯bfs,还被cin卡了下时间.. #include<io ...

  3. 《挑战程序设计竞赛》2.1 广度优先搜索 AOJ0558 POJ3669 AOJ0121

    AOJ0558 原文链接: AOJ0558 题意: 在H * W的地图上有N个奶酪工厂,分别生产硬度为1-N的奶酪.有一只吃货老鼠准备从老鼠洞出发吃遍每一个工厂的奶酪.老鼠有一个体力值,初始时为1,每 ...

  4. POJ-3669 Meteor Shower---BFS+预处理

    题目链接: https://vjudge.net/problem/POJ-3669 题目大意: 巨大流星雨即将袭来.每个流星会对击中的地方以及周围(上下左右四格)造成破坏.Bessie开始时位于(0, ...

  5. POJ-3669 Meteor Shower(bfs)

    http://poj.org/problem?id=3669 注意理解题意:有m颗行星将会落在方格中(第一象限),第i颗行星在ti时间会摧毁(xi,yi)这个点和四周相邻的点,一个人开始在原点,然后只 ...

  6. POJ3669(Meteor Shower)(bfs求最短路)

    Meteor Shower Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12642   Accepted: 3414 De ...

  7. POJ3669解题报告(bfs)

    POJ3669http://poj.org/problem?id=3669 很明显是一道bfs的题目 由于陨石的降临具有时刻性,所以地图是随时间变化的, 所以可以使用结构体来存储陨石下落的时刻以及位置 ...

  8. 【搜索】POJ-3669 BFS

    一.题目 Description Bessie hears that an extraordinary meteor shower is coming; reports say that these ...

  9. POJ-3669

    Meteor Shower Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 21055   Accepted: 5499 De ...

随机推荐

  1. php变量数据类型

    整型:可以用十进制.八进制.十六进制指定.十进制就是日常使用的数字:八进制,数字前必须加上“0”(这个0是阿拉伯数字0,可不是英文字母“欧”哦):十六进制,数字前必须加“0x” (这个0也是阿拉伯数字 ...

  2. LightOJ 1027 A Dangerous Maze (数学期望)

    题意:你面前有 n 个门,每次你可以选择任意一个进去,如果xi是正数,你将在xi后出去,如果xi是负数,那么xi后你将回来并且丢失所有记忆,问你出去的期望. 析:两种情况,第一种是直接出去,期望就是 ...

  3. React学习笔记4

    遇到的问题 目前模板是自己任意定义的,样式不好控制 在组件设计时,可以把页面数据显示的地方,分割父子组件嵌套的结构,比如,商品数据显示列表,把组外层容器看成是父组件,里面是数据显示的渲染模板,看成是子 ...

  4. 新增扩展程序功能打包提交新版 WARNING ITMS-90473 警告问题

    1.问题描述 自从在主应用中加入SiriShortCut功能之后,打包程序上传至 iTunes Connect 就会出现警告,看其原因描述是CFBundleVersion主应用与子应用的不一致导致的 ...

  5. java中容器的概念

    容器:顾名思义,装东西的器物至于spring中bean,aop,ioc等一些都只是实现的方式具体容器哪些值得我们借鉴,我个人觉得是封装的思想.将你一个独立的系统功能放到一个容器之中,可以当做一个大的接 ...

  6. 老程序员解Bug的通用套路

    千万不要当程序员面说有bug 对于新手程序员而言,在复杂代码中找BUG是一个难点.下面我们总结下老从程序员解Bug的通用套路,希望对大家有帮助. 1.IDE调试 根据项目特点和语言特点选择一个最合适的 ...

  7. ueditor的bug

    1)过滤script style标签ueditor.all.jsallowDivTransToP:false ueditor.config.js,allowDivTransToP:false //允许 ...

  8. CKEditor编辑器的使用方法

    CKEditor  网页中实现所见即所得的编辑器. 使用步骤: 1.下载CKEditor  下载地址:http://ckeditor.com/download 2.添加CKEditor的文件夹到项目中 ...

  9. SpringMVC中静态文件的引用

    1.在WebRoot目录下创建 resources文件,里面可以放入css文件 2.在SpringMVC中的配置文件dispatcherServlet-servlet.xml中加入 <!-- 将 ...

  10. docker构建mysql容器及Navicat 远程连接

    1. MySQL部署 1.1拉取MySQL镜像 docker pull mysql 查看镜像 docker images 1.2创建MySQL容器 首先建立所需要的 文件夹: docker run - ...