HDU 3085 Nightmare Ⅱ 双向BFS
题意:很好理解,然后注意几点,男的可以一秒走三步,也就是三步以内的都可以,鬼可以穿墙,但是人不可以,鬼是一次走两步
分析:我刚开始男女,鬼BFS三遍,然后最后处理答案,严重超时,然后上网看题解,发现是双向BFS
就一秒一秒走就行,男的一秒走3,女的一秒走1,然后走过的分别赋值男女标记,当走到对方的标记时就是答案了
然后有一个不能走的地方和两个鬼的位置曼哈顿距离搞一下就行,
注:然后涨了姿势,是队列可以直接赋值,q1=q2,以前都不知道
#include<cstdio>
#include<cstring>
#include<queue>
#include<cstdlib>
#include<cmath>
using namespace std;
typedef long long LL;
const int N=;
int T,n,m;
int dx[]= {,,,-};
int dy[]= {-,,,};
int mp[N][N];
char s[N][N];
struct Point
{
int x,y;
} z[];
queue<Point>q[];
int step;
bool check(int x,int y)
{
if(x<||x>n||y<||y>m)return ;
if(s[x][y]=='X')return ;
int l1=abs(x-z[].x)+abs(y-z[].y);
int l2=abs(x-z[].x)+abs(y-z[].y);
if(l1<=*step||l2<=*step)return ;
return ;
}
bool bfs(int pos,int num)
{
q[]=q[pos];
for(int i=; i<num; ++i)
{
while(!q[].empty())
{
Point a=q[].front();
q[].pop();
q[pos].pop();
if(!check(a.x,a.y))continue;
for(int j=; j<; ++j)
{
int x=a.x+dx[j];
int y=a.y+dy[j];
if(!check(x,y))continue;
if(mp[x][y]==pos)continue;
if(mp[x][y]==(pos^))return ;
mp[x][y]=pos;
q[pos].push(Point {x,y});
}
}
q[]=q[pos];
}
return ;
}
int solve()
{
int ans=-;
while(!q[].empty()||!q[].empty())
{
++step;
if(bfs(,)||bfs(,))
{
ans=step;
break;
}
}
return ans;
}
int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
for(int i=; i<=n; ++i)
scanf("%s",s[i]+);
for(int i=; i<; ++i)
while(!q[i].empty())
q[i].pop();
step=;
int cnt=;
for(int i=; i<=n; ++i)
{
for(int j=; j<=m; ++j)
{
mp[i][j]=-;
if(s[i][j]=='M')q[].push(Point {i,j}),mp[i][j]=;
else if(s[i][j]=='G')q[].push(Point{i,j}),mp[i][j]=;
else if(s[i][j]=='Z')z[cnt].x=i,z[cnt].y=j,cnt++;
}
}
printf("%d\n",solve());
}
return ;
}
HDU 3085 Nightmare Ⅱ 双向BFS的更多相关文章
- HDU 3085 Nightmare Ⅱ (双向BFS)
Nightmare Ⅱ Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- Nightmare Ⅱ HDU - 3085 (双向bfs)
Last night, little erriyue had a horrible nightmare. He dreamed that he and his girl friend were tra ...
- HDU - 3085 Nightmare Ⅱ
HDU - 3085 Nightmare Ⅱ 双向BFS,建立两个队列,让男孩女孩一起走 鬼的位置用曼哈顿距离判断一下,如果该位置与鬼的曼哈顿距离小于等于当前轮数的两倍,则已经被鬼覆盖 #includ ...
- HDU 3085 Nightmare Ⅱ(噩梦 Ⅱ)
HDU 3085 Nightmare Ⅱ(噩梦 Ⅱ) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Ja ...
- HDU 3085 Nightmare II 双向bfs 难度:2
http://acm.hdu.edu.cn/showproblem.php?pid=3085 出的很好的双向bfs,卡时间,普通的bfs会超时 题意方面: 1. 可停留 2. ghost无视墙壁 3. ...
- HDU 3085 Nightmare Ⅱ(双向BFS)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3085 题目大意:给你一张n*m地图上,上面有有 ‘. ’:路 ‘X':墙 ’Z':鬼,每秒移动2步,可 ...
- HDU3085 Nightmare Ⅱ —— 双向BFS + 曼哈顿距离
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3085 Nightmare Ⅱ Time Limit: 2000/1000 MS (Java/Other ...
- 2017多校第10场 HDU 6171 Admiral 双向BFS或者A*搜索
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6171 题意: 给你一个高度为6的塔形数组,你每次只能将0与他上下相邻的某个数交换,问最少交换多少次可以 ...
- HDU 1242 -Rescue (双向BFS)&&( BFS+优先队列)
题目链接:Rescue 进度落下的太多了,哎╮(╯▽╰)╭,渣渣我总是埋怨进度比别人慢...为什么不试着改变一下捏.... 開始以为是水题,想敲一下练手的,后来发现并非一个简单的搜索题,BFS做肯定出 ...
随机推荐
- struts2与velocity的整合有两种方式
1.以struts2为主.struts2内置了对velocity的支持,只要在<result name="success"?type="velocity" ...
- crontab定时任务中文乱码问题
手动执行都很正常的的脚本,添加到定时任务中日志文件全是乱码经过多方查证终于找到了原因! crontab启动的任务没有获取系统的环境变量,导致中文乱码解决办法: 在执行的脚步中添加编码方式或者添加对 ...
- [搜片神器]BT种子下载超时很多的问题分析
继续接着第一篇写:使用C#实现DHT磁力搜索的BT种子后端管理程序+数据库设计(开源)[搜片神器] 谢谢园子朋友的支持,已经找到个VPS进行测试,国外的服务器: h31bt.org 大家可以给提点意 ...
- linux 添加用户
1.下面就开始来说怎么添加新用户 我们以添加一个用户名为jorcen的新用户为例来说明,执行下面的命令: # useradd jorcen 2.那么就新用户就添加完成,但是没有任何信息,新用户添加完成 ...
- 【技术贴】删除360快捷搜索 ctrl+ctrl
恶心的功能,这么变态!如何删除360快捷键ctrl,桌面跳出360搜索怎么办?360 ctrl 删除 卸载方法: 桌面右下角,在360图标上右键点击设置,进入设置中心. 把 [开启快捷搜索功能,双击C ...
- DEDECMS采集规则,过滤,替换文章内的部分内容
1.采集去除链接[Copy to clipboard]CODE:{dede:trim}]*)>([^<]*){/dede:trim}---------------------------- ...
- jquery图片放大器插件
将鼠标移动到一张图片上来的时候,放大该图片的某些细节. <html> <head> <script src="../js/jquery-1.6.js" ...
- 分析java程序中cpu占用过高的线程
http://blog.csdn.net/jgwei/article/details/12079147 http://hllvm.group.iteye.com/group/topic/38893 h ...
- http://www.cnblogs.com/zhwl/p/3642486.html
http://www.cnblogs.com/zhwl/p/3642486.html http://blog.csdn.net/hpf911/article/details/14165865
- c# 可访问性级别
使用访问修饰符 public.protected.internal 或 private 可以为成员指定以下声明的访问级别之一. 声明的可访问性 含义 public 访问不受限制. protecte ...