一、题目

HDU2102

二、题意分析

该题其实就是三位空间内的BFS,但比较简单的是,它设置了传送门,可以直接传送上去,需要注意的是

1.到了传送门的时候要重新考虑传送的点的三种情况。

  (1)若又是传送门,这两个点都可以不再考虑了。

  (2)若是墙,如题意,直接pass掉。

  (3)若是P,找到了。

2.在T之前找到公主后也是可以的合理解释是不是骑士和公主可以在那里聊到T时刻?

三、AC代码

 #include <cstdio>
#include <iostream>
#include <cstring>
#include <fstream>
#include <queue> using namespace std; int N, M, T;
const int dx[] = {, , , -};
const int dy[] = {, -, , };
char Map[][][];
bool visit[][][];
struct Node
{
int level, x, y;
}S, P;
// Node Q[1000000];
// int Rea, Cnt;
bool judge(Node t)
{
if(t.level < || t.level >= || t.x < || t.x >= N || t.y < || t.y >= M
|| Map[t.level][t.x][t.y] == '*' || visit[t.level][t.x][t.y] == )
return false;
return true;
} bool BFS()
{
memset(visit, , sizeof(visit));
queue<Node> Q;
Q.push(S); // Cnt = Rea = 0;
// Q[Cnt++] = S;
visit[S.level][S.x][S.y] = ; for(int t = ; t <= T; t++)
{
int size = (int)Q.size();
//int size = Cnt - Rea;
while(size--)
{
Node cur = Q.front();
Q.pop();
//Node cur = Q[Rea++]; for(int i = ; i < ; i++)
{
Node next = cur;
next.x += dx[i];
next.y += dy[i];
if(judge(next))
{
if(Map[next.level][next.x][next.y] == '#')
{
visit[next.level][next.x][next.y] = ;
next.level++;
next.level%=;
if(!judge(next))
continue;
}
if(Map[next.level][next.x][next.y] == '#')
{
visit[next.level][next.x][next.y] = ;
continue;
}
else if(Map[next.level][next.x][next.y] == 'P')
{
return true;
}
else
{
visit[next.level][next.x][next.y] = ;
Q.push(next);
}
//Q[Cnt++] = next;
}
}
}
}
return false; } int main()
{
//freopen("input.txt", "r", stdin);
int C;
scanf("%d", &C);
while(C--)
{
scanf("%d %d %d", &N, &M, &T);
for(int i = ; i < ; i++)
{
for(int j = ; j < N; j++)
{
scanf("%s", Map[i][j]);
for(int k = ; k < M; k++)
{
if(Map[i][j][k] == 'S')
{
S.level = i;
S.x = j;
S.y = k;
}
else if(Map[i][j][k] == 'P')
{
P.level = i;
P.x = j;
P.y = k;
}
}
}
getchar();
}
if(BFS())
printf("YES\n");
else
printf("NO\n");
}
return ;
}

HDU_2102 A计划 【BFS】的更多相关文章

  1. HDU 2102 A计划(BFS/DFS走迷宫)

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

  2. A计划(BFS)

    A计划 http://acm.hdu.edu.cn/showproblem.php?pid=2102 Time Limit: 3000/1000 MS (Java/Others)    Memory ...

  3. HDU2102 A计划 —— BFS

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2102 A计划 Time Limit: 3000/1000 MS (Java/Others)    Me ...

  4. hdu 2102 A计划-bfs

    Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...

  5. HDOJ 2102 A计划(bfs)

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

  6. HDU - 2102 A计划 (BFS) [kuangbin带你飞]专题二

    思路:接BFS判断能否在限制时间内到达公主的位置,注意如果骑士进入传送机就会被立即传送到另一层,不会能再向四周移动了,例如第一层的位置(x, y, 1)是传送机,第二层(x, y, 2)也是传送机,这 ...

  7. HDU 2102 A计划 (BFS或DFS)

    题意:中文题. 析:是一个简单的搜索,BFS 和 DFS都可行, 主要是这个题有一个坑点,那就是如果有一层是#,另一个层是#或者*,都是过不去的,就可以直接跳过, 剩下的就是一个简单的搜索,只不过是两 ...

  8. A计划(bfs)

    A计划 Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submissio ...

  9. A计划(双层bfs)

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

随机推荐

  1. 5.python之pip安装模块失败

    本文是篇水文,主要是在学习python过程中总是遇到使用pip安装一些模块失败,记录一下安装模块解决办法 第一种方法: 首先安装wheel模块: pip install wheel 如果wheel都安 ...

  2. js 清空 input[type=file]的值

    js 不能操作 input[type=file]但你可以将这个 input 的 dom 元素删除掉,再新增一个,或者替换掉 $("#UploadFile").replaceWith ...

  3. [GO]随机生成切片元素并使用冒泡排序方式进行排序

    package main import ( "math/rand" "time" "fmt" ) func ButtleData(s []i ...

  4. Customizing Site-Wide Behavior for ASP.NET Web Pages (Razor) Sites

    Customizing Site-Wide Behavior for ASP.NET Web Pages (Razor) Sites By Tom FitzMacken|February 17, 20 ...

  5. ubuntu 14.04编译安装xen4.4总结

    1. 安装环境 操作系统:ubuntu14.04 xen版本:xen4.4 2. 依赖包的安装 在安装xen之前先进行依赖包的安装,在不停得尝试之后,总结出以下需要安装的依赖包. sudo apt-g ...

  6. Java反射学习:深入学习Java反射机制

    一.Java反射的理解(反射是研究框架的基础之一) Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的 ...

  7. 深度学习:原理与应用实践(张重生) - Caffe

    如今,深度学习是国际上非常活跃.非常多产的研究领域,它被广泛应用于计算机视觉.图像分析.语音识别和自然语言处理等诸多领域.在多个领域上,深度神经网络已大幅超越了已有算法的性能. 本书是深度学习领域的一 ...

  8. 20169219 实验四Android程序设计

    一.实现Linux下dc的功能,计算后缀表达式的值 public int evaluate(String expr) { int op1, op2, result = 0; String token; ...

  9. 在MYSQL中运用全文索引(FULLTEXT index)

    在MYSQL中使用全文索引(FULLTEXT index) MYSQL的一个很有用的特性是使用全文索引(FULLTEXT index)查找文本的能力.目前只有使用MyISAM类型表的时候有效(MyIS ...

  10. Log--事务日志

    由于日志是顺序写入,而修改数据分散在数据库各个页面,属于随机写入,而磁盘顺序写入速度远高于随机写入,因此主流数据库都采用预写日志的方式来确保数据完整性 1.日志记录的是数据的变化而不是引发数据的操作2 ...