HDU 3533 Escape BFS搜索
题意:懒得说了
分析:开个no[100][100][1000]的bool类型的数组就行了,没啥可说的
#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
#include <algorithm>
#include <string>
#include <cmath>
#include <queue>
#include <set>
using namespace std;
const int N=;
int n,m,k,d,l;
struct node
{
char s[];
int x,y,v,t;
} o[N];
bool mp[N][N];
bool no[N][N][];
void No(int pos)
{
l=;
for(int i=o[pos].x-; i>=; --i)
if(mp[i][o[pos].y])
{
l=i+;
break;
}
for(int i=; i<=d; i+=o[pos].t)
{
int now=o[pos].x-o[pos].v;
for(int j=i+; j<=d&&now>=l; ++j,now-=o[pos].v)
no[now][o[pos].y][j]=;
}
}
void S(int pos)
{
l=n;
for(int i=o[pos].x+; i<=n; ++i)
if(mp[i][o[pos].y])
{
l=i-;
break;
}
for(int i=; i<=d; i+=o[pos].t)
{
int now=o[pos].x+o[pos].v;
for(int j=i+; j<=d&&now<=l; ++j,now+=o[pos].v)
no[now][o[pos].y][j]=;
}
}
void W(int pos)
{
l=;
for(int i=o[pos].y-; i>=; --i)
if(mp[o[pos].x][i])
{
l=i+;
break;
}
for(int i=; i<=d; i+=o[pos].t)
{
int now=o[pos].y-o[pos].v;
for(int j=i+; j<=d&&now>=l; ++j,now-=o[pos].v)
no[o[pos].x][now][j]=;
}
}
void E(int pos)
{
l=m;
for(int i=o[pos].y+; i<=m; ++i)
if(mp[o[pos].x][i])
{
l=i-;
break;
}
for(int i=; i<=d; i+=o[pos].t)
{
int now=o[pos].y+o[pos].v;
for(int j=i+; j<=d&&now<=l; ++j,now+=o[pos].v)
no[o[pos].x][now][j]=;
}
}
struct asd
{
int x,y,w;
} a,e;
int dx[]= {,,,,-};
int dy[]= {,-,,,};
queue<asd>q;
int bfs()
{
while(!q.empty())q.pop();
q.push(asd {,,});
no[][][]=;
while(!q.empty())
{
a=q.front();
q.pop();
for(int i=; i<; ++i)
{
e.x=a.x+dx[i];
e.y=a.y+dy[i];
e.w=a.w+;
if(e.x<||e.x>n||e.y<||e.y>m)continue;
if(e.w>d)continue;
if(mp[e.x][e.y])continue;
if(no[e.x][e.y][e.w])continue;
if(e.x==n&&e.y==m)return e.w;
no[e.x][e.y][e.w]=;
q.push(e);
}
}
return -;
}
int main()
{
while(~scanf("%d%d%d%d",&n,&m,&k,&d))
{
memset(mp,,sizeof(mp));
memset(no,,sizeof(no));
for(int i=; i<=k; ++i)
{
scanf("%s%d%d%d%d",o[i].s,&o[i].t,&o[i].v,&o[i].x,&o[i].y);
mp[o[i].x][o[i].y]=;
}
int ans=;
if(mp[][]||mp[n][m])
ans=-;
if(ans!=-)
for(int i=; i<=k; ++i)
{
if(o[i].s[]=='N')No(i);
else if(o[i].s[]=='S')S(i);
else if(o[i].s[]=='W')W(i);
else E(i);
}
if(ans!=-)ans=bfs();
if(ans==-)printf("Bad luck!\n");
else printf("%d\n",ans);
}
return ;
}
HDU 3533 Escape BFS搜索的更多相关文章
- 【搜索】 HDU 3533 Escape BFS 预处理
要从0,0 点 跑到m,n点 路上会有k个堡垒发射子弹.有子弹的地方不能走,子弹打到别的堡垒就会消失,或者一直飞出边界(人不能经过堡垒 能够上下左右或者站着不动 每步都须要消耗能量 一共同拥有en ...
- HDU 3533 Escape bfs 难度:1
http://acm.hdu.edu.cn/showproblem.php?pid=3533 一道普通的bfs,但是由于代码实现出了bug还是拖了很久甚至对拍了 需要注意的是: 1.人不能经过炮台 2 ...
- HDU 3533 Escape (BFS + 预处理)
Escape Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...
- HDU 3533 Escape(bfs)
Escape Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- HDU 3533 Escape(大逃亡)
HDU 3533 Escape(大逃亡) /K (Java/Others) Problem Description - 题目描述 The students of the HEU are maneu ...
- HDU 3533 Escape(BFS+预处理)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3533 题目大意:给你一张n* m的地图,人在起点在(0,0)要到达终点(n,m)有k(k<=10 ...
- HDU 1495 非常可乐 BFS 搜索
http://acm.hdu.edu.cn/showproblem.php?pid=1495 题目就不说了, 说说思路! 倒可乐 无非有6种情况: 1. S 向 M 倒 2. S 向 N 倒 3. N ...
- HDU 1495 非常可乐 BFS搜索
题意:有个为三个杯子(杯子没有刻度),体积为s,n,m,s=m+n, 刚开始只有体积为s的杯子装满可乐,可以互相倒,问你最少的次数使可乐均分,如果没有结果,输出-1; 分析:直接互相倒就完了,BFS模 ...
- hdu 1240:Asteroids!(三维BFS搜索)
Asteroids! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
随机推荐
- 类似nike+、香蕉打卡的转场动画效果-b
首先,支持并感谢@wazrx 的 http://www.jianshu.com/p/45434f73019e和@onevcat 的https://onevcat.com/2013/10/vc-tran ...
- Windows下配置使用 MemCached
Windows下配置使用MemCached 工具: memcached-1.2.6-win32-bin.zip MemCached服务端程序(for win) Memcached Manage ...
- Extjs4.2——Panel
一.Panel的border属性: 示例: Ext.create('Ext.panel.Panel', { title: 'Hello', width: 200, height:100, border ...
- mybatis foreach标签
一.批量插入数据 示例:添加订单商品表 1.模型层的相应代码 /** * 添加订单商品表 * @param ordergoods * @return */ public boolean addOrde ...
- spoj 178
输出相邻的点 比较简单吧....... #include <cstdio> #include <cstring> using namespace std; int main ...
- HDU 1203 I NEED A OFFER!(01 背包DP)
点我看题目 题意 : 中文题不详述. 思路 :类似于01背包的DP,就是放与不放的问题,不过这个要求概率,至少得到一份offer的反面就是一份也得不到,所以先求一份也得不到的概率,用1减掉就可以得到所 ...
- hibernate annotation注解 columnDefinition用法
column注解中的columnDefinition属性用于覆盖数据库DDL中的语句:(MySql) @Column(columnDefinition = "int(11) DEFAULT ...
- 李洪强iOS开发之XMPP
XMPP历史 这个xmpp框架在2008年开始,不过是一个简单地RFC实现.提供一个最小的代理去接受三种xmpp的基本类型presence.message.iq.因为framwork只提供了最小的 ...
- CentOS系统内核升级
yum -y update 升级所有包,改变软件设置和系统设置,系统版本内核都升级 yum -y upgrade 升级所有包,不改变软件设置和系统设置,系统版本升级,内核不改变
- Android Paint中setTextSize
界面适配的时候发现Paint.setTextSize与TextView.setTextSize传入的单位不一致.Paint.setTextSize传入的单位是px,TextView.setTextSi ...