HDU 3533
题意:
一个人从(0,0)跑到(n,m),只有k点能量,一秒消耗一点,在图中有k个炮塔,给出炮塔的射击方向c,射击间隔t,子弹速度v,坐标x,y
问这个人能不能安全到达终点
要求: 
1.人不能到达炮塔所在的坐标
2.炮塔会挡住子弹
3.途中遇到子弹是安全的,但是人如果停在这个坐标,而子弹也刚好到这个坐标,人就被射死
4.人可以选择停止不动
思路:其实不难,我们只需要看当人位于某个点的时候,其四个方向是否有炮塔,这个炮塔是都向人的方向射击,然后再看子弹是否刚好位于这个坐标即可。
而标记的话,vis[x][y][time],对于time时刻,人位于x,y的情况只需要访问一次,这是唯一的
参考别人的做的,差点T了,注意题目上说简化题意没有 静止不动的情况,但若考虑会wa。
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <queue>
#include <string.h>
#include <math.h>
using namespace std;
int n,m,k,d;
int map[110][110];
struct castle
{int x,y,v,t;int fx;
}pao[110];bool vis[110][110][1100];
struct node
{int x,y,step;
};
int dir[5][2]={ 1,0, -1,0, 0,1, 0,-1, 0, 0};
void bfs()
{memset(vis,0,sizeof(vis));struct node u,v;u.x=0; u.y=0; u.step=0;vis[0][0][0]=1;queue<node> que ;que.push(u);while(!que.empty()){u=que.front() ; que.pop();if(u.x==n&&u.y==m){if(u.step<=d) printf("%d\n",u.step);else printf("Bad luck!\n");return;}for(int i=0;i<5;++i){int xx=u.x+dir[i][0],yy=u.y+dir[i][1];if(xx<0||yy<0||xx>n||yy>m) continue;if(vis[xx][yy][u.step+1]==1||map[xx][yy]!=-1) continue ;bool flag=1;for(int j=xx+1;j<=n;++j){if(map[j][yy]!=-1){int id = map[j][yy];int much = j-xx;int time= u.step+1-(much/pao[id].v);if(pao[id].fx!=1||much%pao[id].v) break;if(time<0) break;if(time%pao[id].t==0) {   flag =0; break;}}}if(flag==0) continue;for(int j=xx-1;j>=0;--j){if(map[j][yy]!=-1){int id = map[j][yy];int much = xx-j;int time= u.step+1-(much/pao[id].v);if(pao[id].fx!=3||much%pao[id].v) break;if(time<0) break;if(time%pao[id].t==0) {   flag =0; break;}}}if(flag==0) continue;for(int j=yy+1;j<=m;++j){if(map[xx][j]!=-1){int id = map[xx][j];int much = j-yy;int time= u.step+1-(much/pao[id].v);if(pao[id].fx!=4||much%pao[id].v) break;if(time<0) break;if(time%pao[id].t==0) {   flag =0; break;}}}if(flag==0) continue;for(int j=yy-1;j>=0;--j){if(map[xx][j]!=-1){int id = map[xx][j];int much = yy-j;int time= u.step+1-(much/pao[id].v);if(pao[id].fx!=2||much%pao[id].v) break;if(time<0) break;if(time%pao[id].t==0) {   flag =0; break;}}}if(flag==0) continue;v.x=xx; v.y=yy; v.step=u.step+1; vis[xx][yy][u.step+1]=1;que.push(v);}}printf("Bad luck!\n");return ;
}
int main()
{while(scanf("%d%d%d%d",&n,&m,&k,&d)!=EOF){char s[5];int t,v,x,y,temp;memset(map,-1,sizeof(map));for(int i=1;i<=k;++i){scanf("%s",s);scanf("%d%d%d%d",&t,&v,&x,&y);if(s[0]=='N') temp = 1;else if(s[0]=='E') temp = 2;else if(s[0]=='S') temp = 3;else  temp = 4;pao[i].fx=temp;   pao[i].x=x; pao[i].y=y; pao[i].t=t; pao[i].v=v;map[x][y]=i;}bfs();}return 0;
}

HDU 3533 BFS相关推荐

  1. [kuangbin]专题二 搜索进阶 Escape HDU - 3533【BFS】

    [题目描述] The students of the HEU are maneuvering for their military training. The red army and the blu ...

  2. hdu 5433(bfs+dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5433 解题思路: dp[i][j][k]表示在(x,y)点,毅力为k时的最小体力.由于每个点可能会走多 ...

  3. hdu 2579 BFS

    http://acm.hdu.edu.cn/showproblem.php?pid=2579 题目大意:给定 r * c 的迷宫,还有一个整数 k .迷宫中"."表示可以走,&qu ...

  4. D - Age of Moyu HDU - 6386 -BFS+DFS分层最短路

    D - Age of Moyu HDU - 6386 题意:双向图,m条边,每条边有一个编号id,而花费就是根据这个id的变化来确定的求1-n的最短路 思路:全值为0,1的图直接bfs按层遍历图找到n ...

  5. hdu 5167 bfs

    因为斐波那契数列增长很快(指数级),所以10Y以内只有不到50个斐波那契数,将这些数字所有可能的乘积存起来查询即可,这里采用bfs+set的方式. 1 #include <iostream> ...

  6. hdu 1026 bfs+记录路径

    题意:从0,0点出发到n-1,m-1点,路上的数字代表要在这个点额外待多少秒,求最短的路 递归输出路径即可 1 #include<cstdio> 2 #include<iostrea ...

  7. hdu 4568 bfs + 状压dp

    //这题的数据是不是有问题... 不考虑宝藏一个也拿不到也能AC... 1 #include "bits/stdc++.h" 2 using namespace std; 3 co ...

  8. hdu 1044 BFS(压缩图)+DFS

    题意:              给你起点,终点,图上有墙有路还有宝物,问你在规定时间内能否能到终点,如果能问最多能捡到多少宝物. 思路:           看完这个题目果断 BFS+三维的mark ...

  9. hdu 1226(bfs+同余剪枝)

    超级密码 Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  10. hdu 5179(bfs打表+二分)

    beautiful number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

最新文章

  1. 服务发现系统之consul入门
  2. pppoe设计的一般性
  3. Android布局管理器-从实例入手学习相对布局管理器的使用
  4. 数据结构与算法 -- 栈 ADT
  5. boost::contract模块实现overload的测试程序
  6. SCCM2012 R2集成WSUS服务器-4:部署软件更新组
  7. VB6实现的自动停靠窗体
  8. linux 禁ping
  9. win10系统WiFi突然消失打不开,终极解决方法
  10. Android事件分发理解
  11. influxdb的retention policy
  12. 三峡大学校赛----十万桃花图(线性基)
  13. elementui select选中获取整个item对象以及回显
  14. 打上花火(打ち上げ花火) --罗马音歌词中文谐音歌词
  15. html中如何设置动画鼠标,使用animate动画库添加鼠标经过动画
  16. OSRM开源地图导航引擎介绍一
  17. 100 篇最受欢迎的 Chat 汇总
  18. LiteOS 消息队列
  19. OC与swift相互调用
  20. Frontiers in neuroscience: 网络游戏成瘾者额叶theta频段震荡活动的降低

热门文章

  1. 华为鸿蒙系统英语报纸_“鸿蒙”系统的英文名叫这个!华为注册的这些名字都该怎么翻译?...
  2. 日常收支记账,使用图表查看类别收支
  3. 802d简明调试手册_802D 简明调试指南.pdf
  4. oom 如何避免 高并发_高并发下的内存管理技巧
  5. crispr基因编辑_用CRISPR编程基因组
  6. 3dmax:3dmax三维VR渲染设置之摄像机设置(修改摄像机、创建摄像机及其基本参数{视野、正交投影、镜头、环境范围、剪切平面、多过程效果、运动模糊、景深参数、运动模糊参}解释等)图文教程之详细攻略
  7. 天梯图excl_处理器2014最全天梯图
  8. 关心国事-21世纪经济报道:周鸿祎人治雅虎中国
  9. 基于存储卡的音乐播放器0.6
  10. Star CCM+ 2206安装