亡命逃窜

时间限制:1000 ms  |  内存限制:65535 KB
难度:4
描述

从前有个叫hck的骑士,为了救我们美丽的公主,潜入魔王的老巢,够英雄吧。不过英雄不是这么好当的。这个可怜的娃被魔王抓住了,倍受折磨,生死一线。有一天魔王出去约会了,这可是一个千载难逢的逃命机会。你现在的任务就是判断一下这个英雄未遂的孩子能不能在魔王回来之前逃出魔王的城堡,成功逃生,最后迎娶我们美丽的公主。

魔王住在一个城堡里,城堡是一个A*B*C的立方体,可以被表示成A个B*C的矩阵,刚开始hck被关在(0,0,0)的位置,离开城堡的门在(A-1,B-1,C-1)的位置,现在知道魔王将在T分钟后回到城堡,hck每分钟能从一个坐标走到相邻的六个坐标中的其中一个.现在给你城堡的地图,请你计算出hck能否在魔王回来前离开城堡(只要走到出口就算离开城堡,如果走到出口的时候魔王刚好回来也算逃亡成功),如果可以请输出需要多少分钟才能离开,如果不能则输出-1.

如图所示,输入数据中的第0块的最左上角是hck被关的地方,第A-1块的最右下角是城堡的出口。按照图中红色箭头方向移动每一层以构成整个城堡。

输入
输入数据的第一行是一个正整数K,表明测试数据的数量. 每组测试数据的第一行是四个正整数A,B,C和T(1<=A,B,C<=50,1<=T<=1000),它们分别代表城堡的大小和魔王回来的时间.
然后是A块输入数据(先是第0块,然后是第1块,第2块......),每块输入数据有B行,每行有C个正整数,代表迷宫的布局,其中0代表路,1代表墙.
(如果对输入描述不清楚,可以参考上面的迷宫描述,它表示的就是上图中的迷宫)

输出
对于每组测试数据,如果hck能够在魔王回来前离开城堡,那么请输出他最少需要多少分钟,否则输出-1.
样例输入
  1. 2
  2. 3 2 2 10
  3. 0 1
  4. 0 0
  5. 1 1
  6. 1 0
  7. 0 0
  8. 0 1
  9. 3 3 4 20
  10. 0 1 1 1
  11. 0 0 1 1
  12. 0 1 1 1
  13. 1 1 1 1
  14. 1 0 0 1
  15. 0 1 1 1
  16. 0 0 0 0
  17. 0 1 1 0
  18. 0 1 1 0
样例输出
  1. -1
  2. 11
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<string>
  4. #include<cstring>
  5. #include<queue>
  6. #include<algorithm>
  7. using namespace std;
  8. const int maxn=;
  9. int map[maxn][maxn][maxn];
  10. bool vis[maxn][maxn][maxn];
  11. int dir[][]={{,,},{,,-},{,,},{,-,},{,,},{-,,}};//定义六个方向;
  12. int a,b,c;// 宽,高,长;;
  13. struct state
  14. {
  15. int x,y,z,step;
  16. };
  17. bool judge(state s)
  18. {
  19. if(!( s.x>a || s.x< || s.y>b || s.y< || s.z<||s.z>c)&&!vis[s.x][s.y][s.z] && map[s.x][s.y][s.z]== )
  20. return ;//满足边界条件和满足可以继续走的条件,返回1
  21. else return ;
  22. }
  23. queue<state>mm;
  24. state now,eed;
  25. int dfs(int x,int y,int z,int t)
  26. {
  27. memset(vis,,sizeof(vis));
  28. while(!mm.empty()) mm.pop();
  29. now.x=x;now.y=y;now.z=z;
  30. now.step=t;
  31. mm.push(now);
  32. vis[now.x][now.y][now.z]=;
  33. while(!mm.empty())
  34. {
  35. now=mm.front();mm.pop();
  36. if(now.x==a && now.y==b && now.z==c)
  37. {
  38. return now.step;
  39. }
  40. for(int i=;i<;i++)
  41. { eed.x=now.x+dir[i][];eed.y=now.y+dir[i][];eed.z=now.z+dir[i][];
  42. eed.step=now.step+;
  43. if(judge(eed))
  44. {
  45. mm.push(eed);
  46. vis[eed.x][eed.y][eed.z]=;
  47. }
  48. }
  49.  
  50. }
  51. return -;
  52. }
  53. int main()
  54. {
  55. int i,j,k,t,m,wall;
  56. scanf("%d",&t);
  57. while(t--)
  58. {wall=;
  59. scanf("%d %d %d %d",&a,&b,&c,&m);
  60. for(i=;i<=a;i++)
  61. for(j=;j<=b;j++)
  62. for(k=;k<=c;k++)
  63. {
  64. scanf("%d",&map[i][j][k]);//用cin竟然超时了,换成scanf一下AC
  65. if(map[i][j][k]==) wall++;
  66. }
  67. int g=dfs(,,,);
  68. // cout<<"g="<<g<<endl;
  69. if(g<=m && g>)
  70. cout<<g<<endl;
  71. else cout<<"-1"<<endl;
  72. }
  73. return ;
  74. }

ny523 亡命逃串 hdoj 1253胜利大逃亡的更多相关文章

  1. hdoj 1253 胜利大逃亡

    胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  2. HDOJ 1253 胜利大逃亡(bfs)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1253 思路分析:因为问题需要寻找到达终点的最短的距离(最短的步数),即在状态转换图上需要找出层次最浅的 ...

  3. Hdoj 1253.胜利大逃亡 题解

    Problem Description Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会. 魔王住在一个城堡里,城堡是一个ABC的立方体,可以被表示成A个B*C的矩 ...

  4. hdoj 1429 胜利大逃亡(续) 【BFS+状态压缩】

    题目:pid=1429">hdoj 1429 胜利大逃亡(续) 同样题目: 题意:中文的,自己看 分析:题目是求最少的逃亡时间.确定用BFS 这个题目的难点在于有几个锁对于几把钥匙.唯 ...

  5. hdu 1253 胜利大逃亡 (三维简单bfs+剪枝)

    胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  6. hdu 1253:胜利大逃亡(基础广搜BFS)

    胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  7. HDU 1253 胜利大逃亡 NYOJ 523【BFS】

    胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  8. HDOJ 1429 胜利大逃亡(续)

    胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  9. [ACM] hdu 1253 胜利大逃亡 (三维BFS)

    胜利大逃亡 Problem Description Ignatius被魔王抓走了,有一天魔王出差去了,这但是Ignatius逃亡的好机会. 魔王住在一个城堡里,城堡是一个A*B*C的立方体,能够被表示 ...

随机推荐

  1. 算法笔记_127:蓝桥杯2017模拟赛-本科组习题解答(Java)

     目录 1 算年龄 2 猜算式 3 排列序数 4 字符串比较 5 还款计算 6 滑动解锁 7 风险度量   PS:以下代码部分仅供参考,若有不当之处,还请路过同学指出哦~ 1 算年龄 标题:算年龄 英 ...

  2. OpenERP的短信(SMS)接口

    今天测试了一下OpenERP的短信(SMS)接口. 在OpenERP的Partner界面上,WebClient的右边的工具条有个“send sms”的按钮.OpenERP中发短信用的是短信的Web接口 ...

  3. AWK中的OFS的问题

    echo a b c d |awk '{OFS = ":";print $0}' 我的理解是应该把输出显示为如下的方式 a:b:c:d dan但执行的结果不是这样的 a b c d ...

  4. ArchLinux下LXDE的安装与设置心得

    安装 首先安装基本的桌面环境: $ sudo pacman -S lxde 奇怪的是默认并没有安装面板lxpanel,而且源里也没有,只好从AUR安装之: $ yaourt -S lxpanel-sv ...

  5. Fusion Tables 图层用于呈现 Google Fusion Tables 中包含的数据

    Google Maps API 允许您使用 FusionTablesLayer 对象将 Google Fusion Tables 中包含的数据呈现为地图上的图层.Google Fusion Table ...

  6. 项目里面加入redis单机版 和集群版的配置

    第一步: 如果你是maven项目,你直接配置就可以了,如果不是需要下载这个包 jedis包 <!-- Redis  客户端 -->          <dependency>  ...

  7. Python学习笔记015——文件file的常规操作之四(输入重定向)

    windows命令提示符(cmd.exe)和Linux Shell(bash等)均可通过">"或”>>“将输出重定向.其中, ">"表示 ...

  8. System V 共享内存区

    1.概述 系统调用mmap通过映射一个普通文件实现共享内存.System V 则是通过映射特殊文件系统shm中的文件实现进程间的共享内存通信.也就是说,每个共享内存区域对应特殊文件系统shm中的一个文 ...

  9. Concurrency Managed Workqueue(二)CMWQ概述

    一.前言 一种新的机制出现的原因往往是为了解决实际的问题,虽然linux kernel中已经提供了workqueue的机制,那么为何还要引入cmwq呢?也就是说:旧的workqueue机制存在什么样的 ...

  10. js 重写 bootstrap 样式 alert/confirm 消息窗口

    相信很多人都受够了 alert.confirm 的样子,最近正在用 bootstrap 做项目,顺便封装了一个 bootstrap 样式的消息框. 实现起来很简单,bootstrap 本身就自带了 m ...