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. 和封神一起“深挖”Spark
  2. FineReport中Domino数据库连接方法
  3. 运行scrapy保存图片,报错ValueError: Missing scheme in request url: h
  4. Python中的堆实现:heapq 模块——利用堆结构实现快速访问数据流中的中位数
  5. [原创] 对于深度学习(deep learning)在工业界的应用现状和突破 [by matthewbai]
  6. WINDOWS下简单操作SQLITE3
  7. LiveGBS国标GB/T28181流媒体平台华为IPC设备GB35114配置接入说明
  8. 《《《翻译》》》avod 三维生成与目标检测
  9. 缠中说禅:缠非缠、禅非禅,枯木龙吟照大千(整理版)
  10. 1114 Family Property (25 point(s)) PAT甲级
  11. 抽象代数之S3的自同构群和S3的内自同构群
  12. 【Python实用工具】暴力破解-2!Python编写八位数密码本
  13. 图片秒加水印制作生成威信小程序源码下载
  14. 六级通关笔记--词汇1
  15. MEGA UNO固件烧写教程
  16. codeforces C2. Pokémon Army (hard version)(模拟)
  17. 新款苹果手机_入手新款苹果手机半个月 他们这样评价新手机
  18. C/C++超市收银系统
  19. STM32 Cube ADC 测量土壤湿度
  20. 利用Python提取视频中的字幕(文字识别)

热门文章

  1. Unity【Face Cap】- 关于人脸捕捉的解决方案(二)
  2. rpm -qa的意思详解
  3. 在LCD液晶屏成功显示图片
  4. 量化投资学习——Boost多因子选股综述
  5. IT男的魔都10年及N次面试 - 如何在500强升职顺便搞定漂亮MM
  6. 安卓linux获取最高权限获取,安卓root是什么意思(获取手机最高权限)
  7. java实现通讯录(手机版)
  8. 打开chm文件c语言,chm格式,手把手教你chm文件怎么打开
  9. maven仓库清理缓存文件(dos工具)
  10. Unity3D自由摄像头视角旋转,平移,缩放