题目:

可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验。魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主的肉也能长生不老。年迈的国王正是心急如焚,告招天下勇士来拯救公主。不过公主早已习以为常,她深信智勇的骑士LJ肯定能将她救出。 
现据密探所报,公主被关在一个两层的迷宫里,迷宫的入口是S(0,0,0),公主的位置用P表示,时空传输机用#表示,墙用*表示,平地用.表示。骑士们一进入时空传输机就会被转到另一层的相对位置,但如果被转到的位置是墙的话,那骑士们就会被撞死。骑士们在一层中只能前后左右移动,每移动一格花1时刻。层间的移动只能通过时空传输机,且不需要任何时间。

思路:

填坑填坑了!!!!

其实这题只用一个BFS就搞定了,在状态点里边多加一个属性表示这个状态在哪一层里边,就可以了。

代码:

#include <bits/stdc++.h>
#include <iostream>
#define FRE() freopen("in.txt","r",stdin) using namespace std;
const int maxn = ;
int dx[]= {,,-,};
int dy[]= {,-,,};
int vis[][maxn][maxn];
char mp[][maxn][maxn];
int n,m,t;
struct Node
{
int x,y,lev,c;
}; bool isin(int x,int y)
{
return x>=&&x<n&&y>=&&y<m;
} bool BFS()
{
queue<Node> que;
vis[][][] = ;
que.push(Node{,,,});
while(!que.empty())
{
Node p = que.front();
que.pop();
if(mp[p.lev][p.x][p.y]=='P' && p.c<=t)
return true;
for(int i=; i<; i++)
{
int tx = p.x+dx[i],ty = p.y+dy[i];
if(isin(tx,ty) && mp[p.lev][tx][ty]!='*' && !vis[p.lev][tx][ty])
{
if(mp[p.lev][tx][ty]=='P'||mp[p.lev][tx][ty]=='.')//同一层中进行遍历
{
vis[p.lev][tx][ty] = ;
que.push(Node{tx,ty,p.lev,p.c+});
}
else if(mp[p.lev][tx][ty]=='#' && !vis[(p.lev+)%][tx][ty])//不同层中进行传送
{
if(mp[(p.lev+)%][tx][ty]!='#' && mp[(p.lev+)%][tx][ty]!='*')//避免无限制的传送和撞死
{
vis[p.lev][tx][ty] = ;
vis[(p.lev+)%][tx][ty] = ;
que.push(Node{tx,ty,(p.lev+)%,p.c+});
}
}
}
}
}
return false;
} int main()
{
//FRE();
int kase;
cin>>kase;
while(kase--)
{
memset(vis,,sizeof(vis));
cin>>n>>m>>t;
for(int k=; k<; k++)
{
for(int i=; i<n; i++)
{
for(int j=; j<m; j++)
{
cin>>mp[k][i][j];
}
}
}
if(BFS())
cout<<"YES\n";
else
cout<<"NO\n";
}
return ;
}

最新文章

  1. 简单测试nginx1.90做TCP协议负载均衡的功能
  2. [html]head区域编写规范
  3. centos7下安装nodejs
  4. [.net 面向对象编程基础] (22) 事件
  5. springMVC中使用ajax传递json数组
  6. String.Format将人民币符号改成美元符号{0:C}
  7. NHibernate系列文章七:NHibernate对象状态
  8. 匿名对象和object的转换
  9. LINUX系统下PHP显示空白页
  10. php foreach 操作数组的代码
  11. j2ee的13个标准
  12. json xmpp
  13. 项目中常用SQL语句总结
  14. c++如何使用SOCKET 发送HTTP1.1 GET POST请求包
  15. SQL Server中TempDB管理(版本存储区的一个example)
  16. 洗礼灵魂,修炼python(5)--python操作符,内置函数
  17. 使用 vi 命令
  18. CF Manthan, Codefest 16 B. A Trivial Problem
  19. tablib cell() missing 1 required positional argument: &#39;column&#39; 报错
  20. 【Java】Properties文件的解析

热门文章

  1. jquery 插件2014
  2. Ruby&#160;Encoding类
  3. 解决 iphone5 4 inch 屏 app黑边问题
  4. linux 文件 chgrp、chown、chmod
  5. poj 3164 Command Network (朱刘算法)
  6. fix for 12c profile
  7. Unity笔记(4)自学第六天
  8. php中读取以及写入文件的方法总结
  9. PMP项目管理学习笔记(2)——组织、约束和干系人
  10. sql创建发送邮件账号