hdu 3085(双向bfs)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3085
思路:双向广搜,每次从M出发,搜三步,从G出发,搜一步,然后就是判断是否走到对方已经走过的格子,至于魔王的判断,可以用曼哈顿距离。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
#define MAXN 1000 struct Node{
int x,y;
Node(){}
Node(int xx,int yy):x(xx),y(yy){};
}mm,gg,zz[]; bool mark[MAXN][MAXN][];
int n,m,step;
char map[MAXN][MAXN];
int dir[][]={{-,},{,},{,-},{,}};
queue<pair<int,int> >que[]; bool Judge(int x,int y)
{
if(x>=&&x<n&&y>=&&y<m&&map[x][y]!='X'){
for(int i=;i<;i++){
if((abs(x-zz[i].x)+abs(y-zz[i].y))<=*step)return false;
}
return true;
}
return false;
} bool bfs(int num)
{
int size=que[num].size();
while(size--){
int x=que[num].front().first;
int y=que[num].front().second;
que[num].pop();
if(!Judge(x,y))continue;
for(int i=;i<;i++){
int xx=x+dir[i][];
int yy=y+dir[i][];
if(Judge(xx,yy)){
if(!mark[xx][yy][num]){
if(mark[xx][yy][num^])return true;
mark[xx][yy][num]=true;
que[num].push(make_pair(xx,yy));
}
}
}
}
return false;
} int Solve()
{
memset(mark,false,sizeof(mark));
while(!que[].empty())que[].pop();
while(!que[].empty())que[].pop();
que[].push(make_pair(mm.x,mm.y));
que[].push(make_pair(gg.x,gg.y));
mark[mm.x][mm.y][]=mark[gg.x][gg.y][]=true;
step=;
while(!que[].empty()||!que[].empty()){
step++;
if(bfs())return step;//mm要搜三步
if(bfs())return step;
if(bfs())return step;
if(bfs())return step;
}
return -;
} int main()
{
int _case,index;
scanf("%d",&_case);
while(_case--){
scanf("%d%d",&n,&m);
index=;
for(int i=;i<n;i++){
scanf("%s",map[i]);
for(int j=;j<m;j++){
if(map[i][j]=='M')mm=Node(i,j);
else if(map[i][j]=='G')gg=Node(i,j);
else if(map[i][j]=='Z')zz[index++]=Node(i,j);
}
}
printf("%d\n",Solve());
}
return ;
}
hdu 3085(双向bfs)的更多相关文章
- HDU - 3085 双向BFS + 技巧处理 [kuangbin带你飞]专题二
题意:有两只鬼,一个男孩女孩被困在迷宫中,男孩每秒可以走三步,女孩只能1步,鬼可以两步且可以通过墙.问男孩女孩是否可以在鬼抓住他们之前会合? 注意:每秒开始鬼先移动,然后两人开始移动. 思路:以男孩和 ...
- Eight HDU - 1043 (双向BFS)
记得上人工智能课的时候老师讲过一个A*算法,计算估价函数(f[n]=h[n]+g[n])什么的,感觉不是很好理解,百度上好多都是用逆向BFS写的,我理解的逆向BFS应该是从终点状态出发,然后把每一种状 ...
- 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步,可 ...
- HDU 3085 Nightmare Ⅱ (双向BFS)
Nightmare Ⅱ Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- HDU 3085 Nightmare Ⅱ 双向BFS
题意:很好理解,然后注意几点,男的可以一秒走三步,也就是三步以内的都可以,鬼可以穿墙,但是人不可以,鬼是一次走两步 分析:我刚开始男女,鬼BFS三遍,然后最后处理答案,严重超时,然后上网看题解,发现是 ...
- 2017多校第10场 HDU 6171 Admiral 双向BFS或者A*搜索
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6171 题意: 给你一个高度为6的塔形数组,你每次只能将0与他上下相邻的某个数交换,问最少交换多少次可以 ...
- HDU 1043 Eight(双向BFS+康托展开)
http://acm.hdu.edu.cn/showproblem.php?pid=1043 题意:给出一个八数码,求出到达指定状态的路径. 思路:路径寻找问题.在这道题里用到的知识点挺多的.第一次用 ...
- HDU 1242 -Rescue (双向BFS)&&( BFS+优先队列)
题目链接:Rescue 进度落下的太多了,哎╮(╯▽╰)╭,渣渣我总是埋怨进度比别人慢...为什么不试着改变一下捏.... 開始以为是水题,想敲一下练手的,后来发现并非一个简单的搜索题,BFS做肯定出 ...
随机推荐
- 对Ubuntu操作系统进行彻底优化
在安装Linux系统之初,就应该考虑怎样使Linux系统得到最好的性能.Linux本身也设计成可以良好扩展的形态,比如在Linux系统中,我们可以随心所欲地组织磁盘分区,有些朋友喜欢一个/,一个swa ...
- ASP.NET配置文件machine.config与性能[转]
转 http://www.cnblogs.com/chenlulouis/archive/2010/05/26/1744261.html http://www.cnblogs.com/zhangron ...
- mosquitto --- 单向认证
1.生成证书要单向配置SSL 需要 做三项前置工作 1. 生成CA证书 2.生成server 端证书,server 端key github 的一个开源项目已经做到这点 ,详情可见 https://gi ...
- Java入门 第一季第二章 变量和常量
这是我学习慕课网Java课程的笔记.原视频链接为:http://www.imooc.com/learn/85 2-1 Java中的keyword PS:Javakeyword区分大写和小写 2-2 认 ...
- javascript、js操作json对象和字符串互相转换方法
相信前端的同学们对json并不陌生,接触过很多.但是很少人知道json的全称是什么,哈哈,我也是查资料知道的.(JSON JavaScript Object Notation是一种轻量级的数据交换格式 ...
- django Models cross file ---- 跨app引用文件
一.django 的跨app引用文件是通过import 来实现的,但是import 的路径查找和标准的import 不太一样,django里面更加方便了 二.例子 1.project 结构说明 [ji ...
- 翻翻git之---给传统的搜索增添友好动画 JJSearchViewAnim
转载请注明出处:王亟亟的大牛之路 这篇我又是个酱油,只是传播好东西也是一份功德. 由于节前被告知节后要把之前的EC项目翻成AS.那肯定要做一些加入新功能和旧实现替代的事,所以这两天也比較忙,正好另一些 ...
- RSA加密的测试demo
使用.net自带的RSA,需要引用System.Security.Cryptography 测试环境.net4.6 static void Main(string[] args) { var RSA ...
- Delphi 全局画点TCanvas.Pixels[X,Y]
procedure TForm1.btnChangePixelClick(Sender: TObject); var baseX : integer ; baseY : integer ; i,j : ...
- (oneway void) release中oneway的意思
oneway is used with the distributed objects API, which allows use of objective-c objects between dif ...