【搜索】 HDU 3533 Escape BFS 预处理
来源:互联网 发布:淘宝智能客服 编辑:程序博客网 时间:2024/05/21 11:17
要从0,0 点 跑到m,n点 路上会有k个堡垒发射子弹,有子弹的地方不能走,子弹打到别的堡垒就会消失,或者一直飞出边界(人不能经过堡垒
可以上下左右或者站着不动 每步都需要消耗能量 一共有eng个能量
先预处理出地图 用三维数组表示mp[x][y][time] time表示该时间的地图上储存不能走的点
然后就是普通BFS
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <string>#include <iostream>#include <algorithm>#include <sstream>#include <math.h>using namespace std;#include <queue>#include <stack>#include <vector>#include <deque>#include <set>#include <map>#define cler(arr, val) memset(arr, val, sizeof(arr))#define IN freopen ("in.txt" , "r" , stdin);#define OUT freopen ("out.txt" , "w" , stdout);typedef long long LL;const int MAXN = 66666;//点数的最大值const int MAXM = 20006;//边数的最大值const int INF = 1101521204;const int mod = 10000007;int m,n,k,eng;struct node{ int x,y,v,t,f;}kp[102];struct node1{ int x,y,step;};queue<node1>q;int xx[5]={0,-1,1,0,0};int yy[5]={0,0,0,-1,1};bool vis[110][110][1009];bool mp[110][110][1009];bool point[110][110];bool inmp(int x,int y){ if(x<0||x>m||y<0||y>n) return false; return true;}int bfs(int x,int y){ node1 front,rear; front.x=x,front.y=y,front.step=0; while(!q.empty()) q.pop(); q.push(front); while(!q.empty()) { front=q.front(); front.step++; q.pop(); for(int i=0;i<5;i++) { int dx=front.x+xx[i],dy=front.y+yy[i]; if(inmp(dx,dy)&&!mp[dx][dy][front.step]&&!point[dx][dy]&&!vis[dx][dy][front.step]) { vis[dx][dy][front.step]=true; if(dx==m&&dy==n) return front.step;//到达终点 if(front.step+1>eng) continue; rear.x=dx,rear.y=dy,rear.step=front.step; q.push(rear); } } } return -1;}int main(){ // IN; while(scanf("%d%d%d%d",&m,&n,&k,&eng)!=EOF) { cler(mp,false); cler(vis,false); cler(point,false); for(int i=0;i<k;i++) { char c[3]; scanf("%s%d%d%d%d",c,&kp[i].t,&kp[i].v,&kp[i].x,&kp[i].y); if(c[0]=='N') kp[i].f=1; else if(c[0]=='S') kp[i].f=2; else if(c[0]=='W') kp[i].f=3; else if(c[0]=='E') kp[i].f=4; point[kp[i].x][kp[i].y]=true; } for(int i=0;i<k;i++) { int dx=kp[i].x,dy=kp[i].y,v=kp[i].v,next=kp[i].f; for(int j=1;j<=eng;j++) { int flag=0; dx+=xx[next],dy+=yy[next]; if(!inmp(dx,dy)) break; for(int l=0;l<v;l++)//路上有堡垒 { if(point[dx-xx[next]*l][dy-yy[next]*l]) { flag=1;break; } } if(flag) break; int x=j; while(x<=eng) { mp[dx][dy][x]=true;//标记不能走 x+=kp[i].t; } } } int ans=bfs(0,0); if(ans==-1) printf("Bad luck!\n"); else printf("%d\n",ans); } return 0;}
0 0
- 【搜索】 HDU 3533 Escape BFS 预处理
- HDU 3533 Escape 预处理+bfs
- HDU - 3533----Escape(BFS+预处理)
- HDU 3533 Escape (bfs + 预处理 + 剪枝)
- BFS-hdu-3533-Escape
- HDU-3533-Escape(BFS)
- FZU 2196 Escape(BFS预处理+BFS搜索)
- HDU 3533 Escape(BFS)
- 【HDU 3533】Escape(BFS)
- hdu 2337 Escape from Enemy Territory (二分枚举+预处理+bfs)
- hdu 2337 Escape from Enemy Territory (预处理+二分+搜索)
- hdu 3533 搜索+预处理
- hdu Escape(bfs+模拟)
- hdu-2364-Escape(bfs)
- HDU 3567 BFS+预处理
- CSU 1815: Enterprising Escape (BFS搜索)
- POJ 3601 Escape from Enemy Territory (二分+BFS+预处理)
- hdu2337 Escape From Enemy Territory---二分bfs+预处理
- 如何写开题报告
- 关于java安装过程中变量的设置问题
- Objective-c的@property 详解
- java中overload、override、overwrite区别
- Java类生命周期
- 【搜索】 HDU 3533 Escape BFS 预处理
- 哥们的面试经历
- 【SPOJ】2798 Query on a tree again! QTREE系列之3 树链剖分
- C#综合揭秘——深入分析委托与事件
- 网页结构基础2
- hdu 2838(树状数组求逆序数)
- mysql递归查询树形的叶子
- poj 2135 (费用流) 水题
- android 如何隐藏应用程序图标