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
YES
对于搜索的思想 我想没有太多的问题(对于传送门的问题  如果下一层对应的位置还是们或者墙 就算了吧)  主要是优化的问题
一开始我想用两个dfs来搜索 时间消耗太大了 而且重复的东西很多 于是我把两个dfs合并再一起 然后再进行搜索 
合并以后 还是出现了超时的问题   递归是很消耗时间的  那么 对于传送门的判断就不应该在实行递归以后再判断  应该在递归之前就进行相应的判断
贴上代码
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
char mapp[2][11][11];
int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
int vis[2][11][11];
int flag;
int t,n,m;
void dfs(int x,int y,int cont,int revel)
{
 int xx,yy,i;
 if(flag==1) return;
 if(mapp[revel][x][y]=='P')
 {
  if(cont<=t) flag=1;
  return;
 }
 if(cont>=t) return;
 for(i=0;i<4;i++)
 {
  xx=x+dir[i][0];
  yy=y+dir[i][1];
  if(vis[revel][xx][yy]==1||xx<=0||xx>n||yy<=0||yy>m||mapp[revel][xx][yy]=='*') continue;
  if(mapp[revel][xx][yy]=='#')
  {
   if(mapp[1-revel][xx][yy]=='#'||mapp[1-revel][xx][yy]=='*') continue;
   else
   {
    vis[revel][xx][yy]=1;
          dfs(xx,yy,cont+1,1-revel);
          vis[revel][xx][yy]=0; 
   }
  }
  else
  {
    vis[revel][xx][yy]=1;
      dfs(xx,yy,cont+1,revel);
      vis[revel][xx][yy]=0;
  }
  
 }
}
int main()
{
 int c,i,j,k;
 cin>>c;
 while(c--)
 {
  cin>>n>>m>>t;
//  memset(mapp,0,sizeof(mapp));
  for(k=0;k<=1;k++)
  {
      for(i=1;i<=n;i++)
         {
         for(j=1;j<=m;j++)
         {
         cin>>mapp[k][i][j];
      }
      }
     }
  flag=0;
  memset(vis,0,sizeof(vis));
  vis[0][1][1]=1;
  dfs(1,1,0,0);
  if(flag==1) cout<<"YES"<<endl;
  else cout<<"NO"<<endl;
 }
 return 0;
}
 
 

最新文章

  1. java compiler level does not match the version of the installed java project facet 解决方案
  2. 使用expect scp避免直接输密码
  3. html select的事件 方法 属性
  4. JVM探索之内存管理(三)
  5. EDM总结
  6. 巧用Excel分列功能处理数据
  7. CPU原理
  8. 团队博客作业Week1 Team Homework #3软件工程在北航
  9. UIColor各种颜色转换
  10. Java设计模式偷跑系列(六)Singleton模式的建模与实现
  11. Access中的自定义排序设置方式
  12. 守护进程VS守护线程
  13. 如何在mac OS X中查看Emoji表情的含义
  14. java 判断是否是周末
  15. HDFS 上文件块的副本数设置
  16. bzoj1492/luogu4027 货币兑换 (斜率优化+cdq分治)
  17. 9.Mysql字符集
  18. 【机器学习算法-python实现】矩阵去噪以及归一化
  19. 测试人员如何&quot;提问&quot;
  20. JSP 问题总结

热门文章

  1. TP5 查询 字符串条件如何实现
  2. 刷新指定窗口页面的gridTable数据
  3. autoComplete TextView
  4. [转][linux][centos]嵌入式 Linux下编译并使用curl静态库
  5. org.openqa.selenium.WebDriverException: unknown error: call function result missing &#39;value&#39;
  6. Java中使用Socket连接判断Inputstream结束,java tcp socket服务端,python tcp socket客户端
  7. 【php】PHP制作QQ微信支付宝三合一收款码
  8. 报错:(未解决)Opening socket connection to server master/192.168.52.26:2181. Will not attempt to authenticate using SASL (unknown error)
  9. C#中,子线程与主线程之间的通信是如何实现(转)
  10. Python - Django - 在 CBV 中使用装饰器