http://acm.hdu.edu.cn/showproblem.php?pid=5040

一个人拿着纸盒子往目的地走  正常情况下一秒走一格  可以原地不动躲在盒子里  也可以套着盒子三秒走一格

地图上有些灯  灯能照到自己和面前一个格  每一秒灯顺时针转90度  如果要从灯照的地方离开或者进入灯照的地方就必须套上盒子

最短时间到达

题意不清的bfs

#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <string>
#include <bitset>
#include <queue>
#include <iostream>
#include <algorithm>
using namespace std;
#define RD(x) scanf("%d",&x)
#define RD2(x,y) scanf("%d%d",&x,&y)
#define clr0(x) memset(x,0,sizeof(x))
typedef long long LL;
const int maxn = 505;
int sx,sy,n;
int dx[] = {0,1,0,-1},dy[] = {1,0,-1,0};
char s[maxn][maxn];
int dirr[128],notic[maxn][maxn];
bool vis[maxn][maxn][4];
bool in(int x,int y)
{return 0 <= x && x < n && 0 <= y && y < n;
}
struct node{int t,x,y;bool operator < (const node &a)const{return t > a.t;}
};
int bfs()
{priority_queue <node> q;q.push((node){0,sx,sy});while(!q.empty()){node now = q.top(),to;q.pop();if(s[now.x][now.y] == 'T'){return now.t;}if(vis[now.x][now.y][now.t%4])   continue;vis[now.x][now.y][now.t%4] = true;to = now,to.t++;q.push(to);for(int i = 0;i < 4;++i){int mx = now.x + dx[i],my = now.y + dy[i];if(in(mx,my) && s[mx][my] != '#'){//所在格子和目的格子同一秒没有摄像头的时候才能走to.t = now.t + 1;if( (notic[mx][my] | notic[now.x][now.y]) & (1<<(now.t%4)) )to.t = now.t + 3;to.x = mx,to.y = my;q.push(to);}}}return -1;
}
int main (){int  _,cas = 1;RD(_);dirr['E'] = 0,dirr['S'] = 1,dirr['W'] = 2,dirr['N'] = 3;dirr['T'] = dirr['M'] = dirr['.'] = dirr['#'] = -1;while(_--){printf("Case #%d: ",cas++);RD(n);clr0(notic);clr0(vis);for(int i = 0;i < n;++i){scanf("%s",s[i]);for(int j = 0;j < n;++j){if(s[i][j] == 'M')sx = i,sy = j;else{int now = dirr[ s[i][j] ];if(now == -1)continue;notic[i][j] = (1<<4) - 1;for(int k = now;k < 4+now;++k){int mx = i + dx[k%4],my = j + dy[k%4];if(in(mx,my)){notic[mx][my] |= (1<<(k-now));}}}}}cout<<bfs()<<endl;}return 0;
}

转载于:https://www.cnblogs.com/zibaohun/p/4046809.html

hdu 5040 bfs相关推荐

  1. hdu 5040 Instrusive【BFS+优先队列】

    2014北京网络赛09题,hdu 5040 这次网络赛真是惨,也怪做题策略没想好,当时切完签到题之类的水题之后,马上就去看06青蛙那题去了.结果被那只死青蛙给坑惨了T_T...搞了四小时没搞出来... ...

  2. Instrusive 【HDU - 5040】【2014 北京 BFS】

    题目链接 一道有着很多需要细节的地方需要注意的题,挺不错的. 这题的数据也是给的很好,然后讲一下题意吧. 题意:有一个N*N的网格,有起点M和终点T,我们从起点需要走到终点,每一步需要花费的时间是单位 ...

  3. Instrusive hdu 5040 优先队列+BFS

    题目描述: The legendary mercenary Solid Matt gets a classic mission: infiltrate a military base. The mil ...

  4. hdu 5433(bfs+dp)

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

  5. hdu 2579 BFS

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

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

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

  7. hdu 5167 bfs

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

  8. hdu 1026 bfs+记录路径

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

  9. hdu 4568 bfs + 状压dp

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

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

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

最新文章

  1. hp-ux 11.23挂载ISO文件
  2. 优酷路由宝刷梅林_优酷路由宝刷breed(不死)教程
  3. 单核工作法18:简化协作(下)
  4. Sphinx+MySQL5.1x+SphinxSE+mmseg
  5. IAR编译Z-Stack项目报错—Error[e46]: Undefined external “?V11” referred in AF
  6. 理解CNN中的特征图 feature map
  7. matlab里两个for怎么跳出循环,急急急!matlab含有两个for循环,程序不知道哪儿错了,求指教!...
  8. 承包你所有壁纸需求,高图网图片,美到窒息
  9. 数字IC后端设计实现流程之floorplan及powerplan规划
  10. Python print 语句(Python 2 与 Python 3)
  11. Lexical environments: ECMAScript implementation
  12. 用 keepalived 搭建高可用集群之 IP Failover
  13. python对接60码平台
  14. 从计算机视觉到人脸识别:一文看懂颜色模型、信号与噪声
  15. 第七章 在51单片机上移植uc/os-2
  16. 踩坑前端框架 - iview DatePicker 时间选择年月日时分秒
  17. linux 系统qcow2镜像制作
  18. CentOS6.5下搭建LAMP+FreeRadius+Daloradius Web管理和TP-LINK路由器、H3C交换机连接,实现,上网认证和记账功能
  19. Bitwarden报错:Cannot read properties of nul(reading ‘iterations‘)
  20. mysql zimbra_记一次zimbra服务器故障导致mysql起不来问题

热门文章

  1. Windows窗体和常用控件的事件处理函数
  2. FMS集群的安装和配置
  3. 目标跟踪学习笔记_2(particle filter初探1)
  4. ERP知识普及连载(21)
  5. Object.create()和深拷贝
  6. MySQL数据操作:增删改查
  7. C#指南,重温基础,展望远方!(5)C#语句
  8. Spring下的@Inject、@Autowired、@Resource注解区别(转)
  9. A blog from Sensory
  10. 【排序算法】快速排序-迭代方法