hdu 5040 bfs
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;
}
hdu 5040 bfs的更多相关文章
- hdu 5040 BFS 多维化处理图
http://acm.hdu.edu.cn/showproblem.php?pid=5040 跟这一题http://blog.csdn.net/u011026968/article/details/3 ...
- hdu 4531 bfs(略难)
题目链接:点我 第一次不太清楚怎么判重,现在懂了,等下次再做 /* *HDU 4531 *BFS *注意判重 */ #include <stdio.h> #include <stri ...
- 2014年北京网络赛 Instrusive HDU 5040 题解 优先队列
网赛的时候看了这道题,发现就是平常的那种基础搜索题. 由于加了一个特殊条件:可以一次消耗3秒或原地停留1秒. 那就不能使用简单的队列了,需要使用优先队列才行. 题意 告诉一副地图:一个起点,一个终点, ...
- hdu 5040 Instrusive【BFS+优先队列】
11733274 2014-09-26 12:42:31 Accepted 5040 62MS 1592K 4848 B G++ czy 先转一个优先队列的用法: http://www.cppblog ...
- HDU 5040 Instrusive(BFS+优先队列)
题意比较啰嗦. 就是搜索加上一些特殊的条件,比如可以在原地不动,也就是在原地呆一秒,如果有监控也可以花3秒的时间走过去. 这种类型的题目还是比较常见的.以下代码b[i][j][x]表示格子i行j列在x ...
- HDU 5040
http://acm.hdu.edu.cn/showproblem.php?pid=5040 题意比较难懂,有摄像头的位置是可以走的,每回合开始看做人先走摄像头再转,也就是说如果你这回合走之前没有摄像 ...
- hdu 1430 (BFS 康托展开 或 map )
第一眼看到这题就直接BFS爆搜,第一发爆了内存,傻逼了忘标记了,然后就改,咋标记呢. 然后想到用map函数,就8!个不同的排列,换成字符串用map标记.然后又交一发果断超时,伤心,最恨超时,还不如来个 ...
- HDU 2822 (BFS+优先队列)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2822 题目大意:X消耗0,.消耗1, 求起点到终点最短消耗 解题思路: 每层BFS的结点,优先级不同 ...
- HDU 1180 (BFS搜索)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1180 题目大意:迷宫中有一堆楼梯,楼梯横竖变化.这些楼梯在奇数时间会变成相反状态,通过楼梯会顺便到达 ...
随机推荐
- PPT汇报 评审表
评审表 团队编号 团队名称 团队项目名称 格式评审 内容评审 PPT评审 演讲评审 优点 存在问题(至少提3点) 建议 01 牛肉面不要牛肉不要面 02 正义联盟 我是一个图书小平台 03 什么队 & ...
- C#四舍五入说明
string.Format("{0:N2}", d) 与 Math.Round(d, 2).ToString() 不总是相等 string.Format("{0:N2}& ...
- linux添加root级别账户
一条命令 useradd -p `openssl passwd -1 -salt ‘lsof’ admin` -u 0 -o -g root -G root -s /bin/bash -d /usr/ ...
- mysql允许远程登录
Mysql为了安全性,在默认情况下用户只允许在本地登录,可是在有此情况下,还是需要使用用户进行远程连接,因此为了使其可以远程需要进行如下操作: 一.允许root用户在任何地方进行远程登录,并具有所有库 ...
- pip & Jinja2
[pip&Jinja2] 2.7.9 以及上版本的 python 安装程序会自动安装 pip. 升级:pip install --upgrade pip. 使用pip安装Jinja2:sudo ...
- java基础四 [构造器和垃圾回收](阅读Head First Java记录)
本章讲解了对象的创建到被回收的过程,讲述了对象的生命周期 堆(heap)与栈(stack) 实例变量:实例变量是只声明在类下,方法外的变量(实例变量默认值为0/0.0/false,引用的默认值为n ...
- 2-Qt关闭子窗口时执行特定代码
https://blog.csdn.net/naibozhuan3744/article/details/82689434 本文主要总结在关闭qt的QWidget子窗口瞬间,执行特定代码.由于主窗口关 ...
- mysql优化概述3
1.前缀索引 建立索引关键字一种方案. 通常会使用字段的整体作为索引关键字. 有时,使用字段前部分数据,也可以去识别某些记录. 语法: index `索引名` (`字段`(N)); 使用字段前N个字符 ...
- LINQ to Entities 不支持 LINQ 表达式节点类型“ArrayIndex”。
错误原因: bool res1 = S_ROLE_MENU_PURVIEWCODE_Manage.Delete(c => c.MPC_CODE == strs[0]); linq不能写strs[ ...
- web项目传classes目录项目正常,打包成jar不能运行。
笔者最近使用tomcat9,由于工作洁癖,盯上了tomcat启动日志里的"No TLD files were found in"字样,如下 15-Sep-2017 02:19:09 ...