hdu A计划
这道题是一道bfs的题目,因为题目中给的数据很小,所以可以采用优先队列的方式来简化处理。这道题在搜索的过程中要注意map1的不同层次的转换,即对'#'的理解。之前wa了两次是因为我考虑了如果上下两层对应位置都是'#'时输出'NO’,但是这是错误的,可以不考虑这个问题,也可以当上下两层都是‘#’时将它们赋成‘*’;
具体步骤看程序及程序上的注释:
#include"iostream"
#include"stdio.h"
#include"cmath"
#include"string.h"
#include"queue"
#include"algorithm"
#define mx 15
using namespace std;
char map1[mx][mx][];//三维的地图
int dir[][]={{,},{,-},{-,},{,}};//上下左右四个方向
int n,m,t,sx,sy,sz,ex,ey,ez;
struct node
{
int x,y,z,time;
friend bool operator<(node a,node b)//优先队列中的元素按时间的从小到大排序
{
return b.time<a.time;
}
};
int judge(int x,int y,int z)//判断当前位置的情况
{
if(x>=&&x<n&&y>=&&y<m)
{
if(map1[x][y][z]=='.') return ;
else if(map1[x][y][z]=='#') return ;
else return -;
}
else return -;
}
void bfs()
{
priority_queue<node> q;//构造优先队列
node cur,next;
int i;
cur.x=sx;
cur.y=sy;
cur.z=sz;
cur.time=;
q.push(cur);
while(!q.empty())//队列非空就进行循环
{
cur=q.top();
q.pop();//记得出队列
if(cur.x==ex&&cur.y==ey&&cur.z==ez&&cur.time<=t)//找到了目标位置就输出并返回
{cout<<"YES"<<endl;return;}
for(i=;i<;i++)
{
next.x=cur.x+dir[i][];
next.y=cur.y+dir[i][];
next.z=cur.z;
int re=judge(next.x,next.y,next.z);//判断走过一步后的情况
if(re==-) continue;
else
{
if(re==)
{
map1[next.x][next.y][next.z]='*';
next.time=cur.time+;
q.push(next);
}
else if(re==)
{
next.z=(cur.z+)%;
re=judge(next.x,next.y,next.z);//判断时空隧道的对应位置是什么
if(re==)
{ next.time=cur.time+;map1[next.x][next.y][next.z]='*';q.push(next);}
}
}
}
}
cout<<"NO"<<endl;
}
int main()
{
int c;
cin>>c;
while(c--)
{
int i,j,k;
cin>>n>>m>>t;
for(k=;k<=;k++)
{
for(i=;i<n;i++)
{
for(j=;j<m;j++)
{
cin>>map1[i][j][k];
if(map1[i][j][k]=='S')
{
sx=i;sy=j;sz=k;
map1[i][j][k]='*';
}
else if(map1[i][j][k]=='P')
{
map1[i][j][k]='.';
ex=i;ey=j;ez=k;
}
}
}
if(k==)getchar();////注意在输入过程中的空格
}
bfs();
}
return ;
}
hdu A计划的更多相关文章
- hdu 2102 A计划
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2102 A计划 Description 可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸 ...
- [HDU 2102] A计划(搜索题,典型dfs or bfs)
A计划 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- A计划 HDU - 2102
A计划 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- HDU 2102 A计划(BFS/DFS走迷宫)
A计划 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- HDU 2102 A计划(两层地图加时间限制加传送门的bfs)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2102 A计划 Time Limit: 3000/1000 MS (Java/Others) Me ...
- HDU 2102 A计划 (BFS)
A计划 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- HDU 6118 度度熊的交易计划 【最小费用最大流】 (2017"百度之星"程序设计大赛 - 初赛(B))
度度熊的交易计划 Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- I - A计划 HDU - 2102
A计划 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- hdu 2102 A计划-bfs
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...
随机推荐
- 如何用adb logcat保存日志
//将log 保存到当前目录下 adb logcat -v time >a.log //log过滤 adb logcat | grep MyAppName //清除log adb logcat ...
- Java for LeetCode 171 Excel Sheet Column Number
Related to question Excel Sheet Column Title Given a column title as appear in an Excel sheet, retur ...
- BFS:Meteor Shower(POJ 3669)
奔跑吧,傻牛 题目大意:这只Bessie的牛又要来闹事了,这次她的任务就是来躲流星雨,流星雨就是在一定时间会从天上砸到Bessie的所在的正方形区域内(Bessie在0,0的位置),然后砸下 ...
- 【python】choice函数
来源:http://www.runoob.com/python/func-number-choice.html 描述 choice() 方法返回一个列表,元组或字符串的随机项. 语法 以下是 choi ...
- VS2010中“工具>选项中的VC++目录编辑功能已被否决”解决方法
转自:http://blog.csdn.net/chaijunkun/article/details/6658923 这是VS2010的改变,不能够在“工具-选项”中看到“VC++目录”了. 但是呢, ...
- linux架构图
/ 根目录 │ ├boot/ 启动文件.所有与系统启动有关的文件都保存在这里 │ └grub/ Grub引导器相关的文件 │ ├dev/ 设备文件 ├proc/ 内核与进程镜像 │ ├mnt/ 临时挂 ...
- 使用jquery制作可视化的组织结构
组织结构是做项目里面经常用到的,但是要做成可视化的效果比较少,多数使用树结构来表示,但是对于客户来说不是太直观.可以用jOrgChart来实现.如下图的效果,这样就比较直观. 首先你要去下载jOrgC ...
- .net学习笔记---HttpHandle与HttpModule
问题1:什么是HttpHandler? 问题2:什么是HttpModule? 问题3:什么时候应该使用HttpHandler什么时候使用HttpModule? 答案1:HttpHandler,Http ...
- [原]DbHelper-SQL数据库访问助手
using System; using System.Data; using System.Data.SqlClient; namespace Whir.Software.Framework.Ulti ...
- win32_11gR2_database安装教程