HDU_2102 A计划 【BFS】
一、题目
二、题意分析
该题其实就是三位空间内的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】的更多相关文章
- HDU 2102 A计划(BFS/DFS走迷宫)
A计划 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- A计划(BFS)
A计划 http://acm.hdu.edu.cn/showproblem.php?pid=2102 Time Limit: 3000/1000 MS (Java/Others) Memory ...
- HDU2102 A计划 —— BFS
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2102 A计划 Time Limit: 3000/1000 MS (Java/Others) Me ...
- hdu 2102 A计划-bfs
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...
- HDOJ 2102 A计划(bfs)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2102 思路分析: <1>搜索方法分析:由于需要寻找最短的找到公主的路径,所以采用bfs搜索 ...
- HDU - 2102 A计划 (BFS) [kuangbin带你飞]专题二
思路:接BFS判断能否在限制时间内到达公主的位置,注意如果骑士进入传送机就会被立即传送到另一层,不会能再向四周移动了,例如第一层的位置(x, y, 1)是传送机,第二层(x, y, 2)也是传送机,这 ...
- HDU 2102 A计划 (BFS或DFS)
题意:中文题. 析:是一个简单的搜索,BFS 和 DFS都可行, 主要是这个题有一个坑点,那就是如果有一层是#,另一个层是#或者*,都是过不去的,就可以直接跳过, 剩下的就是一个简单的搜索,只不过是两 ...
- A计划(bfs)
A计划 Time Limit : 3000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submissio ...
- A计划(双层bfs)
A计划 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissio ...
随机推荐
- RichEdit在Win8上乱码
之前的一个项目中使用了RichEdit,发现在Win8中输入中文乱码,但是复制粘贴正常. 经过各种搜索调查,发现是msftedit.dll的问题,我在win7上找到msftedit.dll,将它拷贝到 ...
- AntD02 Table组件的使用
1 前提准备 1.1 创建一个angular项目 1.2 将 Ant Design 整合到 Angular 项目中 1.3 官方文档 点击前往 2 简单使用 <nz-table #rowSele ...
- 在Sqlserver中使用Try Catch
创建错误日志表: CREATE TABLE ErrorLog(errNum INT,ErrSev NVARCHAR(1000),ErrState INT,ErrProc NVARCHAR(1000 ...
- 557. Reverse Words in a String III 翻转句子中的每一个单词
[抄题]: Given a string, you need to reverse the order of characters in each word within a sentence whi ...
- CentOS 安装mongodb3.0 二进制包
1.下载mongodb因为64位系统CentOS,所以下载64位的安装包: wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0 ...
- 15.select into
select into SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中. SELECT INTO 语句常用于创建表的备份复件或者用于对记录进行存档. CREATE TABLE ...
- 数据库连接池DBUtils
安装 pip3 install DBUtils DBUtils是Python的一个用于实现数据库连接池的模块. 此连接池有两种连接模式: 模式一:为每个线程创建一个连接,线程即使调用了close方法, ...
- linux学习1----初涉linux
linux因其稳定高效的特点,受到很多开发者的青睐,因此将其作为服务器的操作系统. 作为一名开发者,程序员,掌握了一定的linux知识和技巧,程序的开发部署和运行也有不小的帮助. linux由于其开源 ...
- 很棒的git和python学习网站
很棒的git和python学习网站:http://www.liaoxuefeng.com/ 博主名叫廖雪峰
- android 仿QQ气泡聊天界面
1.现在的QQ,微信等一些APP的聊天界面都是气泡聊天界面,左边是接收到的消息,右边是发送的消息, 这个效果其实就是一个ListView在加载它的Item的时候,分别用了不同的布局xml文件. 2.效 ...