A计划
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 4022 Accepted Submission(s): 911
Problem Description
可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验。魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主的肉也能长生不老。年迈的国王正是心急如焚,告招天下勇士来拯救公主。不过公主早已习以为常,她深信智勇的骑士LJ肯定能将她救出。
现据密探所报,公主被关在一个两层的迷宫里,迷宫的入口是S(0,0,0),公主的位置用P表示,时空传输机用#表示,墙用*表示,平地用.表示。骑士们一进入时空传输机就会被转到另一层的相对位置,但如果被转到的位置是墙的话,那骑士们就会被撞死。骑士们在一层中只能前后左右移动,每移动一格花1时刻。层间的移动只能通过时空传输机,且不需要任何时间。
Input
输入的第一行C表示共有C个测试数据,每个测试数据的前一行有三个整数N,M,T。 N,M迷宫的大小N*M(1 <= N,M <=10)。T如上所意。接下去的前N*M表示迷宫的第一层的布置情况,后N*M表示迷宫第二层的布置情况。
Output
如果骑士们能够在T时刻能找到公主就输出“YES”,否则输出“NO”。
Sample Input
1
5 5 14
S*#*.
.#...
.....
****.
...#.
..*.P
#.*..
***..
...*.
*.#..
Sample Output
说一下这道题,题目意思是:骑士去救公主,要走一个两层迷宫。迷宫有里面有传送器,能通过另外一层的同一地点,若该地点是石头,则会撞死。注意一点,传送器第二层也可能有,有可能需要1or2层之间来回传送,才能救到公主,这里只需要开一个3维数组进行标记就可以了。
代码:
#include <iostream>
#include <stdio.h>
#include <memory.h>
#include <queue>
using namespace std;
int xx[4] = {1, -1, 0, 0};
int yy[4] = {0, 0, 1, -1};
int map[2][15][15]; //三维数组:第一维为层数
char a[2][15][15];
int N, M, T, x1, y1, x2, y2;
bool flag;
struct node
{
int x, y, z, step; //(x,y)是坐标,z是第几层,step是步数
}n, m;
int main()
{
int i, j, k, t;
scanf("%d", &t);
while(t--)
{
scanf("%d %d %d", &N, &M, &T);
for(k = 0; k < 2; k++)
{
for(i = 0; i < N; i++)
{
for(j = 0; j < M; j++)
{
cin>>a[k][i][j];
map[k][i][j] = 10000; //初始化所有标记
}
}
}
flag = false;
n.x = n.y = n.z = n.step = 0;
map[0][0][0] = 0;
queue<node> Q; //建立队列
Q.push(n);
while(!Q.empty())
{
m = Q.front();
Q.pop();
if(a[m.z][m.x][m.y] == 'P') //到达终点
{
flag = true;
break;
}
for(i = 0; i < 4; i++)
{
n.x = m.x + xx[i];
n.y = m.y + yy[i];
if(n.x>=0 && n.x<N && n.y>=0 && n.y<M)
{
n.step = m.step + 1; //更新改点情况
n.z = m.z;
if(a[n.z][n.x][n.y] == '*') continue; //该点不可行,不行
if(n.step > T) continue; //时间已超过,不行
if(a[n.z][n.x][n.y] == '#') //若该点是传送器
{
//先判断传送后的地点是否可行,这里用了^1的方法,0变1,1变0
if(a[n.z^1][n.x][n.y] == '*' || a[n.z^1][n.x][n.y] == '#') continue;
//判断该点步数是否超过该点之前的步数
if(n.step >= map[n.z][n.x][n.y]) continue;
map[n.z][n.x][n.y] = n.step; //更新该点步数
map[n.z^1][n.x][n.y] = n.step; //另外一层的步数都改
n.z ^= 1; //该点属第几层也改变
Q.push(n);
}
else
{
//判断该点步数是否超过该点之前的步数
if(n.step >= map[n.z][n.x][n.y]) continue;
map[n.z][n.x][n.y] = n.step; //更新该点步数
Q.push(n);
}
}
}
}
if(flag) printf("YES\n");
else printf("NO\n");
}
return 0;
}
分享到:
相关推荐
hdu_2102_passed_sorce
- **企业资源计划(ERP)**:帮助企业优化资源管理。 - **客户关系管理(CRM)**:维护与客户的关系。 - **供应链管理(SCM)**:优化产品从原材料到最终消费者的全过程。 **5. 狭义与广义电子商务的区别** - **...
街道级行政区划shp矢量数据,wgs84坐标系,下载直接使用
街道级行政区划shp数据,wgs84坐标系,直接下载使用。
街道级行政区划shp矢量数据,wgs84坐标系,下载直接使用
轻量级密码算法LBlock的FPGA优化实现.docx
街道级行政区划shp矢量数据,wgs84坐标系,下载直接使用
Git 资料 progit-zh-v2.1.1.pdf
街道级行政区划shp数据,wgs84坐标系,直接下载使用。
篮球计分器FPGA附程序..doc
街道级行政区划shp数据,wgs84坐标系,直接下载使用。
内容概要:本文档全面介绍了Linux开发的基础知识、应用场景、环境搭建、常用命令、Shell脚本编程以及C/C++和Python开发等内容。首先阐述了Linux开发的重要性及其在服务器端开发、嵌入式开发和系统运维等领域的广泛应用。接着详细讲解了如何选择合适的Linux发行版并安装系统,配置开发环境,包括安装必要的开发工具和配置SSH服务。文档还深入讲解了Linux基础命令,如文件和目录操作、文件内容查看与编辑、进程管理和权限管理。此外,介绍了Shell脚本编程的基本语法,包括变量、条件语句、循环语句和函数定义。针对C/C++和Python开发,文档分别讲解了编译器安装、程序编写与编译、调试方法及使用虚拟环境等内容。最后,简要介绍了Linux内核开发的相关知识,包括下载编译内核、内核模块开发等,并推荐了相关学习资源。 适合人群:对Linux开发感兴趣的初学者及有一定经验的研发人员,尤其是希望深入掌握Linux开发技能的开发者。 使用场景及目标:①掌握Linux开发环境的搭建与配置;②熟悉Linux基础命令和Shell脚本编程;③学习C/C++和Python在Linux下的开发流程;④了解Linux内核开发的基本概念和技术。 阅读建议:此文档内容丰富,涵盖面广,建议读者根据自身需求选择性阅读,并结合实际操作进行练习。特别是对于初学者,应先掌握基础命令和开发环境的搭建,再逐步深入到编程语言和内核开发的学习。
街道级行政区划shp数据,wgs84坐标系,直接下载使用。
街道级行政区划shp数据,wgs84坐标系,直接下载使用。
街道级行政区划shp数据,wgs84坐标系,直接使用。
内容概要:本文档《word练习题.docx》是一份详细的Word操作练习指南,涵盖了从基础到高级的各种功能。文档分为三个主要部分:内容编辑、页面布局和高效文档。内容编辑部分包括文本格式化、段落设置、项目编号、制表位、边框与底纹等练习;页面布局部分涉及分节符、分栏、页眉页脚、水印等设置;高效文档部分则聚焦于样式管理、导航窗格、题注、书签、超级链接、脚注与尾注、交叉引用等功能。每个练习都有具体的操作步骤,帮助用户掌握Word的各种实用技巧。 适合人群:适用于Word初学者及希望提高Word技能的中级用户,尤其是需要频繁使用Word进行文档编辑和排版的办公人员。 使用场景及目标:①帮助用户熟悉Word的基本操作,如文本编辑、格式设置等;②提升用户的文档排版能力,学会设置复杂的页面布局;③提高工作效率,掌握高效文档管理技巧,如样式应用、题注和交叉引用等。 其他说明:此文档不仅提供了具体的练习题目,还附带了详细的步骤说明,用户可以根据指引逐步完成每个练习。此外,文档中的一些练习涉及到智能文档和Office智能客户端的应用,有助于用户了解Word在企业级应用中的潜力。建议用户按照章节顺序逐步学习,实践每一个练习,以达到最佳的学习效果。
街道级行政区划shp数据,wgs84坐标系,直接下载使用。
全球腐败感知数据(2000-2023)——3000行 33个指标 关于数据集 该数据集包含3000行和33列,涵盖了2000年至2023年的腐败感知指数(CPI)数据和各种治理指标。它包括国家排名、分数和其他指标,如公共部门腐败、司法腐败、贿赂指数、商业道德、民主指数、法治、政府效率、经济指标和人类发展指数。 这些数据可用于: 腐败趋势分析 腐败对GDP、人类发展指数和治理的影响 跨国比较 数据可视化和机器学习模型 该数据集对研究人员、数据分析师、政策制定者和对研究全球腐败趋势非常有用。
毕业设计(论文) 基于FPGA的数字频率计设计.doc
街道级行政区划shp数据,wgs84坐标系,直接使用。