HDOJ 2102
如果传送门'#'的另一层是传送门'#'或者是墙'*',就可以理解为这两层的这个位置都是'*'了
还有就是传送门'#'传过去可以是空地'.' 也可以是目的地'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的更多相关文章
- hdoj 2102 A计画 【BFS】
称号:hdoj 2102 A计画点击打开链接 意甲冠军:文的就不说了.求救出公主所须要的最短时间,所以用广搜. 分析:读题之后不难做,比一般的题目多了一个条件就是能够传送,那么我们能够在广搜里面加一个 ...
- HDOJ 2102 A计划(bfs)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2102 思路分析: <1>搜索方法分析:由于需要寻找最短的找到公主的路径,所以采用bfs搜索 ...
- BFS HDOJ 2102 A计划
题目传送门 题意:中文题面 分析:双层BFS,之前写过类似的题.总结坑点: 1.步数小于等于T都是YES 2. 传送门的另一侧还是传送门或者墙都会死 3. 走到传送门也需要一步 #include &l ...
- hdoj 2102 A计划
A计划 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- 【HDOJ】2102 A计划
BFS,不过有很多地方需要注意,比如传送机传送到另一个传送机.还有要注意格式. #include <iostream> #include <cstdio> #include & ...
- 杭电hdoj题目分类
HDOJ 题目分类 //分类不是绝对的 //"*" 表示好题,需要多次回味 //"?"表示结论是正确的,但还停留在模块阶 段,需要理解,证明. //简单题看到就 ...
- HDOJ 题目分类
HDOJ 题目分类 /* * 一:简单题 */ 1000: 入门用:1001: 用高斯求和公式要防溢出1004:1012:1013: 对9取余好了1017:1021:1027: ...
- HDOJ 1009. Fat Mouse' Trade 贪心 结构体排序
FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- HDOJ 2317. Nasty Hacks 模拟水题
Nasty Hacks Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tota ...
随机推荐
- Shell 脚本模拟 milter 实现黑白名单及关键词过滤
程序执行流程:1. 开始接受邮件.2. 检查发件人是否在黑名单内,如果是拒绝接受;否则继续3. 检查发件人是否在白名单内,如果是接收邮件;否则继续4. 对邮件进行关键字过滤,如果邮件中包含被过滤的关键 ...
- 【教训】rm -fr ./* 教训
昨晚犯了一个重大错误,运行了 rm -rf ./* 本来是要删除一个不重要的目录的,结果在它的父目录下运行了上面命令,结果...都没了... 幸好数据库文件没有被删掉,数据还在,网站程序被删掉了,不久 ...
- POJ 1985 Cow Marathon && POJ 1849 Two(树的直径)
树的直径:树上的最长简单路径. 求解的方法是bfs或者dfs.先找任意一点,bfs或者dfs找出离他最远的那个点,那么这个点一定是该树直径的一个端点,记录下该端点,继续bfs或者dfs出来离他最远的一 ...
- Android中px、dp、sp的区别
px: 即像素,1px代表屏幕上一个物理的像素点: px单位不被建议使用,因为同样100px的图片,在不同手机上显示的实际大小可能不同,如下图所示(图片来自android developer guid ...
- jquery获取value值
$(function(){ alert(1); var a=$("#a004").val(); var a1=$("#b004").val(); //.val就 ...
- eclipse[日文版] 的SVN 上传步骤
可能有些朋友在日企上班,肯定要用到SVN,可是一般就下载和更新,没有用到上传 这里来介绍下上传 1.项目右键 2.点击Share Project 3.点击SVN下一步 4.选择你的上传的服务器地址 5 ...
- iOS中使用正则表达式去掉HTML中的标签元素获得纯文本的方法
content是根据网址获得的网页源码字符串 - (NSString *)changeToString:(NSString *)content { NSRegularExpression *regul ...
- 使用<br>标签分行显示文本
对于上一小节的例子,我们想让那首诗显示得更美观些,如显示下面效果: 怎么可以让每一句诗词后面加入一个折行呢?那就可以用到<br />标签了,在需要加回车换行的地方加入<br /> ...
- java测试1
发大水 package com.java1234.activiti.variable; import java.util.Date; import java.util.HashMap; import ...
- JQuery Easy Ui dataGrid 数据表格 ---制作查询下拉菜单
JQuery Easy Ui dataGrid 数据表格 数据表格 - DataGrid 继承$.fn.panel.defaults,使用$.fn.datagrid.defaults重载默认值.. 数 ...