博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 5040 bfs
阅读量:5097 次
发布时间:2019-06-13

本文共 1867 字,大约阅读时间需要 6 分钟。

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

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

最短时间到达

题意不清的bfs

#include 
#include
#include
#include
#include
#include
#include
#include
#include
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
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<
<

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

你可能感兴趣的文章
tr69c 调试报错检查
查看>>
dl,dt,dd标签的使用
查看>>
Linux 查看文件 cat与 more 用法
查看>>
ZOJ 1244
查看>>
一次笔试题目附答案(sql答卷)
查看>>
【转】CSS Nuggest
查看>>
SQL2008"阻止保存要求重新创建表的更改"问题的解决
查看>>
52、[源码]-Spring源码总结
查看>>
Android开发中整合测试注意事项
查看>>
DevExpress ASP.NET v18.2新功能详解(三)
查看>>
查看linux系统版本命令
查看>>
20155302 课堂实践二
查看>>
JavaScript数值类型保留显示小数方法
查看>>
python--以1-31的数字作为结尾的列表?论英文好的重要性!
查看>>
解决Win7系统新建选项中无记事本问题
查看>>
nginx笔记---http配置
查看>>
升级到WP8必需知道的13个特性
查看>>
python学习笔记—— 多进程中的 孤儿进程和僵尸进程
查看>>
webapi ,前台json传入raw读取
查看>>
poj2481
查看>>