poj3669 广搜
//好久没刷题了,生疏了。
题意分析:
题意理解为在一个二维的正向坐标轴上,一个点(流星)连同它的上下左右的四个点会在某一个时刻被破坏。一个人在原点,问她到达安全区的最小时间是多少。
代码思路:
从原点开始搜索,如果当前的点是安全的(不会被破坏掉),那么就结束了。不然的话,向四个方向搜索,如果该方向的点没有被搜索过,并且到达该点的时间小于那一点被破坏的最小时间减一,那么就认为该点是可以到达的。记录到达该点的最小时间,把该点入队。
搜索的之前的处理是这样的。把每个点都设置为安全(永远不会被破坏),该点被破坏的时间为INF。读入数据的时候,对每一个输入,我们对五个点(输入坐标的点和其上下左右的四个点)进行处理:该点会被破坏,每次取该点被破坏的最小时间。
需要注意的是:虽然输入的坐标范围x,y是[0,300],但是安全点的坐标可能大于300,最大可能是302。我就这样错了一次。
个人的代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
using namespace std; const int N = ,INF=;
struct node
{
int x,y;
bool f;//会不会被破坏
int t;//被破坏最小时间
int s;//走到这里需要的最小时间
}p[N][N];
bool vis[N][N];
int step;
bool isin(int x,int y)
{
return x<=N&&x>=&&y<=N&&y>=;
}
int dx[]={,,,,-};
int dy[]={,,-,,};
queue<node> q;
node p1,p2;
void bfs()
{
int i,j,k;
while(!q.empty())
{
p1=q.front();
q.pop();
//printf("%d %d %d\n",p1.x,p1.y,p1.s);
if(p1.f==) {step=p1.s;break;}
for(k=;k<;k++)
{
i=p1.x+dx[k];
j=p1.y+dy[k];
if(!vis[i][j]&&isin(i,j))
{
if(p1.s+<p[i][j].t)
{
p[i][j].s=p1.s+;
q.push(p[i][j]);
vis[i][j]=;
}
}
}
}
}
int main()
{
//freopen("test.txt","r",stdin);
int m,i,x,y,t,j;
while(scanf("%d",&m)!=EOF)
{
for(i=;i<N;i++){
for(j=;j<N;j++){
p[i][j].x=i;
p[i][j].y=j;
p[i][j].f=;
p[i][j].t=INF;
}
}
for(i=;i<m;i++){
scanf("%d%d%d",&x,&y,&t);
for(j=;j<;j++)
{
int a=x+dx[j],b=y+dy[j];
if(isin(a,b))
{
p[a][b].f=;
p[a][b].t=min(p[a][b].t,t);
}
}
}
while(!q.empty()) q.pop();
p[][].s=;
q.push(p[][]);
vis[][]=;
step=-;
memset(vis,,sizeof(vis));
bfs();
printf("%d\n",step);
}
return ;
}
poj3669 广搜的更多相关文章
- HDU--杭电--1195--Open the Lock--深搜--都用双向广搜,弱爆了,看题了没?语文没过关吧?暴力深搜难道我会害羞?
这个题我看了,都是推荐的神马双向广搜,难道这个深搜你们都木有发现?还是特意留个机会给我装逼? Open the Lock Time Limit: 2000/1000 MS (Java/Others) ...
- HDU 5652(二分+广搜)
题目链接:http://acm.hust.edu.cn/vjudge/contest/128683#problem/E 题目大意:给定一只含有0和1的地图,0代表可以走的格子,1代表不能走的格 子.之 ...
- nyoj 613 免费馅饼 广搜
免费馅饼 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.说来gameboy ...
- poj 3984:迷宫问题(广搜,入门题)
迷宫问题 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7635 Accepted: 4474 Description ...
- poj 3278:Catch That Cow(简单一维广搜)
Catch That Cow Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 45648 Accepted: 14310 ...
- 双向广搜 POJ 3126 Prime Path
POJ 3126 Prime Path Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 16204 Accepted ...
- 广搜+打表 POJ 1426 Find The Multiple
POJ 1426 Find The Multiple Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 25734 Ac ...
- 双向广搜 codevs 3060 抓住那头奶牛
codevs 3060 抓住那头奶牛 USACO 时间限制: 1 s 空间限制: 16000 KB 题目等级 : 黄金 Gold 题目描述 Description 农夫约翰被告知一头逃跑奶牛 ...
- 双向广搜+hash+康托展开 codevs 1225 八数码难题
codevs 1225 八数码难题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Yours和zero在研究A*启 ...
随机推荐
- MySQL(端口3306)
MySQL(二进制)安装: 下载地址:http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.49-linux2.6-x86_64.tar.gz ...
- 2019-02-13 Python爬虫问题 NotImplementedError: Only the following pseudo-classes are implemented: nth-of-type.
soup=BeautifulSoup(html.text,'lxml') #data=soup.select('body > div.main > div.ctr > div > ...
- 洛谷 1373 dp 小a和uim之大逃离 良心题解
洛谷 1373 dp 这题还不算太难,,当初看的时候不是很理解题意,以为他们会选择两条不同的路径,导致整体思路混乱 传送门 其实理解题意和思路之后还是敲了不短的时间,一部分身体原因再加上中午休息不太好 ...
- App架构设计经验谈:接口”安全机制”的设计
[原文地址 点击打开链接] 原创文章,转载请注明:转载自Keegan小钢 并标明原文链接:http://keeganlee.me/post/architecture/20160107 微信订阅号:ke ...
- linux系统监控:记录用户操作轨迹,谁动过服务器
1.前言 我们在实际工作当中,都碰到过误操作.误删除.误修改过配置文件等等事件.对于没有堡垒机的公司来说,要在linux系统上深究到底谁做过配置文件的修改.做过误删除是很头疼的事情,特别是遇到删库跑路 ...
- Cash Machine POJ 1276 多重背包
Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 35387 Accepted: 12816 Description A B ...
- kendo Grid Unexpected number错误
这种用了自定义function来代替默认的就需要把所有的created,update等都替换掉,不能只替换部分
- Linxu用户管理(转)
说明:用户管理的操作涉及root权限,所以以下实例中应该使用sudo或者root用户进行操作. 背景: Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管 ...
- eclipse上导入import git项目
1.左上角File->import->git eclipse 可以从很多来源处import项目,项目来源可以使git/maven/general等. import来源可以看下面 2.点击g ...
- Python开发工具安装
v阅读目录 v写在前面 v基本概念 vWindows搭建python开发环境 v从Hello World开始 v博客总结 v博客前言 从大学开始玩python到现在参加工作,已经有5年了,现在的公司是 ...