要从0,0 点 跑到m,n点  路上会有k个堡垒发射子弹。有子弹的地方不能走,子弹打到别的堡垒就会消失,或者一直飞出边界(人不能经过堡垒

能够上下左右或者站着不动 每步都须要消耗能量  一共同拥有eng个能量

先预处理出地图 用三维数组表示mp[x][y][time] time表示该时间的地图上储存不能走的点

然后就是普通BFS

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <string>
  5. #include <iostream>
  6. #include <algorithm>
  7. #include <sstream>
  8. #include <math.h>
  9. using namespace std;
  10. #include <queue>
  11. #include <stack>
  12. #include <vector>
  13. #include <deque>
  14. #include <set>
  15. #include <map>
  16. #define cler(arr, val) memset(arr, val, sizeof(arr))
  17. #define IN freopen ("in.txt" , "r" , stdin);
  18. #define OUT freopen ("out.txt" , "w" , stdout);
  19. typedef long long LL;
  20. const int MAXN = 66666;//点数的最大值
  21. const int MAXM = 20006;//边数的最大值
  22. const int INF = 1101521204;
  23. const int mod = 10000007;
  24. int m,n,k,eng;
  25. struct node
  26. {
  27. int x,y,v,t,f;
  28. }kp[102];
  29. struct node1
  30. {
  31. int x,y,step;
  32. };
  33. queue<node1>q;
  34. int xx[5]={0,-1,1,0,0};
  35. int yy[5]={0,0,0,-1,1};
  36. bool vis[110][110][1009];
  37. bool mp[110][110][1009];
  38. bool point[110][110];
  39. bool inmp(int x,int y)
  40. {
  41. if(x<0||x>m||y<0||y>n) return false;
  42. return true;
  43. }
  44. int bfs(int x,int y)
  45. {
  46. node1 front,rear;
  47. front.x=x,front.y=y,front.step=0;
  48. while(!q.empty()) q.pop();
  49. q.push(front);
  50. while(!q.empty())
  51. {
  52. front=q.front();
  53. front.step++;
  54. q.pop();
  55. for(int i=0;i<5;i++)
  56. {
  57. int dx=front.x+xx[i],dy=front.y+yy[i];
  58. if(inmp(dx,dy)&&!mp[dx][dy][front.step]&&!point[dx][dy]&&!vis[dx][dy][front.step])
  59. {
  60. vis[dx][dy][front.step]=true;
  61. if(dx==m&&dy==n) return front.step;//到达终点
  62. if(front.step+1>eng) continue;
  63. rear.x=dx,rear.y=dy,rear.step=front.step;
  64. q.push(rear);
  65. }
  66. }
  67. }
  68. return -1;
  69. }
  70. int main()
  71. {
  72. // IN;
  73. while(scanf("%d%d%d%d",&m,&n,&k,&eng)!=EOF)
  74. {
  75. cler(mp,false);
  76. cler(vis,false);
  77. cler(point,false);
  78. for(int i=0;i<k;i++)
  79. {
  80. char c[3];
  81. scanf("%s%d%d%d%d",c,&kp[i].t,&kp[i].v,&kp[i].x,&kp[i].y);
  82. if(c[0]=='N') kp[i].f=1;
  83. else if(c[0]=='S') kp[i].f=2;
  84. else if(c[0]=='W') kp[i].f=3;
  85. else if(c[0]=='E') kp[i].f=4;
  86. point[kp[i].x][kp[i].y]=true;
  87. }
  88. for(int i=0;i<k;i++)
  89. {
  90. int dx=kp[i].x,dy=kp[i].y,v=kp[i].v,next=kp[i].f;
  91. for(int j=1;j<=eng;j++)
  92. {
  93. int flag=0;
  94. dx+=xx[next],dy+=yy[next];
  95. if(!inmp(dx,dy)) break;
  96. for(int l=0;l<v;l++)//路上有堡垒
  97. {
  98. if(point[dx-xx[next]*l][dy-yy[next]*l])
  99. {
  100. flag=1;break;
  101. }
  102. }
  103. if(flag) break;
  104. int x=j;
  105. while(x<=eng)
  106. {
  107. mp[dx][dy][x]=true;//标记不能走
  108. x+=kp[i].t;
  109. }
  110. }
  111. }
  112. int ans=bfs(0,0);
  113. if(ans==-1)
  114. printf("Bad luck!\n");
  115. else printf("%d\n",ans);
  116. }
  117. return 0;
  118. }

【搜索】 HDU 3533 Escape BFS 预处理的更多相关文章

  1. HDU 3533 Escape (BFS + 预处理)

    Escape Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total S ...

  2. HDU 3533 Escape BFS搜索

    题意:懒得说了 分析:开个no[100][100][1000]的bool类型的数组就行了,没啥可说的 #include <iostream> #include <cstdio> ...

  3. HDU 3533 Escape bfs 难度:1

    http://acm.hdu.edu.cn/showproblem.php?pid=3533 一道普通的bfs,但是由于代码实现出了bug还是拖了很久甚至对拍了 需要注意的是: 1.人不能经过炮台 2 ...

  4. HDU 3533 Escape(bfs)

    Escape Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  5. HDU 3533 Escape(大逃亡)

    HDU 3533 Escape(大逃亡) /K (Java/Others)   Problem Description - 题目描述 The students of the HEU are maneu ...

  6. HDU 3533 Escape(BFS+预处理)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3533 题目大意:给你一张n* m的地图,人在起点在(0,0)要到达终点(n,m)有k(k<=10 ...

  7. POJ-1077 HDU 1043 HDU 3567 Eight (BFS预处理+康拓展开)

    思路: 这三个题是一个比一个令人纠结呀. POJ-1077 爆搜可以过,94ms,注意不能用map就是了. #include<iostream> #include<stack> ...

  8. 【算法系列学习】[kuangbin带你飞]专题二 搜索进阶 D - Escape (BFS)

    Escape 参考:http://blog.csdn.net/libin56842/article/details/41909459 [题意]: 一个人从(0,0)跑到(n,m),只有k点能量,一秒消 ...

  9. HDU3533 Escape —— BFS / A*算法 + 预处理

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3533 Escape Time Limit: 20000/10000 MS (Java/Others)  ...

随机推荐

  1. 使用HBuilder新建项目

    依次点击文件→新建→选择Web项目(按下Ctrl+N,W可以触发快速新建(MacOS请使用Command+N,然后左键点击Web项目)) 如上图,请在A处填写新建项目的名称,B处填写(或选择)项目保存 ...

  2. Elasticsearch之CURL命令的GET

    这是个查询命令. 前期博客 Elasticsearch之CURL命令的PUT和POST对比 1. 以上是根据员工id查询. 即在任意的查询字符串中添加pretty参数,es可以得到易于我们识别的jso ...

  3. node or gulp 使用

    ##MAC 升级node.js的方法 ###第一步,先查看本机node.js版本: $ node -v ###第二步,清除node.js的cache: $ sudo npm cache clean - ...

  4. pd_ds 之 hash

    http://attack.cf/?post=23 打个广告....

  5. Server Tomcat v8.0 Server at localhost failed to start 问题解决方法?

    bi编程jsp  servlet 第一个程序: HelloServlet 运行错误 404: 十月 28, 2017 11:25:14 上午 org.apache.tomcat.util.digest ...

  6. 网络中 ping 不通 路由表

    不管是在window还是在linux中,我们经常会遇到ping不通的问题. 这里的原因很多,比如不同的网段交换机做了一些限制等,这些问题是我们人工不能解决的. 但是,当你发现各自的网关是可以ping的 ...

  7. Java 基础入门随笔(1) JavaSE版——java语言三种技术架构

    1.java语言的三种技术架构: J2SE(java 2 Platform Standard Edition):标准版,是为开发普通桌面和商务应用程序提供的解决方案.该技术体系是其他两者的基础,可以完 ...

  8. pycuda installation error: command 'gcc' failed with exit status 1

    原文:python采坑之路 Setup script exited with error: command 'gcc' failed with exit status 1 伴随出现"cuda ...

  9. CAD增加一个有形的线型(网页版)

    主要用到函数说明: _DMxDrawX::AddTextStyle1 向数据库中增加一个文字样式.详细说明如下: 参数 说明 BSTR pszName 文字样式名称 BSTR pszFileName ...

  10. CPU 指令集(Instruction Set Architecture, ISA)

    本文摘自网络 概念 指令集是存储在CPU内部,对CPU运算进行指导和优化的硬程序,用来引导CPU进行加减运算和控制计算机操作系统的一系列指令集合.拥有这些指令集,CPU就可以更高效地运行.系统所下达的 ...