如果传送门'#'的另一层是传送门'#'或者是墙'*',就可以理解为这两层的这个位置都是'*'了

还有就是传送门'#'传过去可以是空地'.' 也可以是目的地'P',不要忽略了

 #include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <queue>
using namespace std; struct node
{
int x,y,floo;
int time;
}; char map[][][];
int visited[][][];
int walk[][]={{-,},{,},{,-},{,}};
int n,m,t; int bfs()
{
queue<node>Q;
node u;
u.x=;
u.y=;
u.floo=;
u.time=;
Q.push(u);
visited[][][]=;
while(!Q.empty())
{
u=Q.front();
Q.pop();
if(u.time==t) continue;
for(int i=;i<;++i)
{
int xx=u.x+walk[i][];
int yy=u.y+walk[i][];
if(xx>-&&xx<n&&yy>-&&yy<m&& (!visited[u.floo][xx][yy]))
{
if(map[u.floo][xx][yy]=='*') continue;
if(map[u.floo][xx][yy]=='P') return ; //下面这句一开始写成了if(map[u.floo][xx][yy]=='.'&&(!visited[u.floo][xx][yy]))
//忽略了如果是(1&&0)的话,就会把'.'当成'#'处理
if(map[u.floo][xx][yy]=='.')
{
node v;
v.x=xx;
v.y=yy;
v.floo=u.floo;
v.time=u.time+;
Q.push(v);
visited[v.floo][v.x][v.y]=;
}
else
{
int f=!u.floo;
if(map[f][xx][yy]=='P') return ;
if(map[f][xx][yy]=='.' && (!visited[f][xx][yy]))
{
node v;
v.x=xx;
v.y=yy;
v.floo=f;
v.time=u.time+;
Q.push(v);
visited[v.floo][v.x][v.y]=;
//visited[u.floo][xx][yy]=1;
}
}
}
}
}
return ;
} int main()
{
int c; scanf("%d",&c);
while(c--)
{
scanf("%d %d %d",&n,&m,&t);
for(int k=;k<;++k)
{
for(int i=;i<n;++i)
{
scanf("%s",&map[k][i]);
}
}
memset(visited,,sizeof(visited));
if(bfs()) printf("YES\n");
else printf("NO\n");
}
}

HDOJ 2102的更多相关文章

  1. hdoj 2102 A计画 【BFS】

    称号:hdoj 2102 A计画点击打开链接 意甲冠军:文的就不说了.求救出公主所须要的最短时间,所以用广搜. 分析:读题之后不难做,比一般的题目多了一个条件就是能够传送,那么我们能够在广搜里面加一个 ...

  2. HDOJ 2102 A计划(bfs)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2102 思路分析: <1>搜索方法分析:由于需要寻找最短的找到公主的路径,所以采用bfs搜索 ...

  3. BFS HDOJ 2102 A计划

    题目传送门 题意:中文题面 分析:双层BFS,之前写过类似的题.总结坑点: 1.步数小于等于T都是YES 2. 传送门的另一侧还是传送门或者墙都会死 3. 走到传送门也需要一步 #include &l ...

  4. hdoj 2102 A计划

    A计划 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  5. 【HDOJ】2102 A计划

    BFS,不过有很多地方需要注意,比如传送机传送到另一个传送机.还有要注意格式. #include <iostream> #include <cstdio> #include & ...

  6. 杭电hdoj题目分类

    HDOJ 题目分类 //分类不是绝对的 //"*" 表示好题,需要多次回味 //"?"表示结论是正确的,但还停留在模块阶 段,需要理解,证明. //简单题看到就 ...

  7. HDOJ 题目分类

    HDOJ 题目分类 /* * 一:简单题 */ 1000:    入门用:1001:    用高斯求和公式要防溢出1004:1012:1013:    对9取余好了1017:1021:1027:   ...

  8. HDOJ 1009. Fat Mouse' Trade 贪心 结构体排序

    FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  9. HDOJ 2317. Nasty Hacks 模拟水题

    Nasty Hacks Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tota ...

随机推荐

  1. Shell 脚本模拟 milter 实现黑白名单及关键词过滤

    程序执行流程:1. 开始接受邮件.2. 检查发件人是否在黑名单内,如果是拒绝接受;否则继续3. 检查发件人是否在白名单内,如果是接收邮件;否则继续4. 对邮件进行关键字过滤,如果邮件中包含被过滤的关键 ...

  2. 【教训】rm -fr ./* 教训

    昨晚犯了一个重大错误,运行了 rm -rf ./* 本来是要删除一个不重要的目录的,结果在它的父目录下运行了上面命令,结果...都没了... 幸好数据库文件没有被删掉,数据还在,网站程序被删掉了,不久 ...

  3. POJ 1985 Cow Marathon && POJ 1849 Two(树的直径)

    树的直径:树上的最长简单路径. 求解的方法是bfs或者dfs.先找任意一点,bfs或者dfs找出离他最远的那个点,那么这个点一定是该树直径的一个端点,记录下该端点,继续bfs或者dfs出来离他最远的一 ...

  4. Android中px、dp、sp的区别

    px: 即像素,1px代表屏幕上一个物理的像素点: px单位不被建议使用,因为同样100px的图片,在不同手机上显示的实际大小可能不同,如下图所示(图片来自android developer guid ...

  5. jquery获取value值

    $(function(){ alert(1); var a=$("#a004").val(); var a1=$("#b004").val(); //.val就 ...

  6. eclipse[日文版] 的SVN 上传步骤

    可能有些朋友在日企上班,肯定要用到SVN,可是一般就下载和更新,没有用到上传 这里来介绍下上传 1.项目右键 2.点击Share Project 3.点击SVN下一步 4.选择你的上传的服务器地址 5 ...

  7. iOS中使用正则表达式去掉HTML中的标签元素获得纯文本的方法

    content是根据网址获得的网页源码字符串 - (NSString *)changeToString:(NSString *)content { NSRegularExpression *regul ...

  8. 使用<br>标签分行显示文本

    对于上一小节的例子,我们想让那首诗显示得更美观些,如显示下面效果: 怎么可以让每一句诗词后面加入一个折行呢?那就可以用到<br />标签了,在需要加回车换行的地方加入<br /> ...

  9. java测试1

    发大水 package com.java1234.activiti.variable; import java.util.Date; import java.util.HashMap; import ...

  10. JQuery Easy Ui dataGrid 数据表格 ---制作查询下拉菜单

    JQuery Easy Ui dataGrid 数据表格 数据表格 - DataGrid 继承$.fn.panel.defaults,使用$.fn.datagrid.defaults重载默认值.. 数 ...