Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会.

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

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

特别注意:本题的测试数据非常大,请使用scanf输入,我不能保证使用cin能不超时.在本OJ上请使用Visual C++提交.
Output
对于每组测试数据,如果Ignatius能够在魔王回来前离开城堡,那么请输出他最少需要多少分钟,否则输出-1.
Sample Input
1
3 3 4 20
0 1 1 1
0 0 1 1
0 1 1 1
1 1 1 1
1 0 0 1
0 1 1 1
0 0 0 0
0 1 1 0
0 1 1 0
Sample Output
11

比较裸的三维BFS,直接按照模板即可。

AC代码

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
int A,B,C,T;
int Map[55][55][55];
int vis[55][55][55];
int dir[6][3]={1,0,0,-1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1};
int ans;
struct Node{int x,y,z;
};
void bfs(int x,int y,int z)
{struct Node temp;temp.x=x;temp.y=y;temp.z=z;vis[x][y][z]=1;queue<struct Node> q;q.push(temp);while(!q.empty()){temp=q.front();q.pop();for(int i=0;i<6;i++){int tx=temp.x+dir[i][0];int ty=temp.y+dir[i][1];int tz=temp.z+dir[i][2];if(tx<0||ty<0||tz<0||tx>=A||ty>=B||tz>=C) continue;if(vis[tx][ty][tz]!=0) continue;if(Map[tx][ty][tz]==1) continue;vis[tx][ty][tz]=vis[temp.x][temp.y][temp.z]+1;struct Node tt;tt.x=tx;tt.y=ty;tt.z=tz;q.push(tt);}}
}
int main()
{int t;scanf("%d",&t);while(t--){memset(vis,0,sizeof(vis));ans=0x3f3f3f;scanf("%d %d %d %d",&A,&B,&C,&T);for(int i=0;i<A;i++)for(int j=0;j<B;j++)for(int k=0;k<C;k++)scanf("%d",&Map[i][j][k]);bfs(0,0,0);if(vis[A-1][B-1][C-1]==0||vis[A-1][B-1][C-1]-1>T)printf("-1\n");elseprintf("%d\n",vis[A-1][B-1][C-1]-1);}return 0;
}

胜利大逃亡 三维BFS相关推荐

  1. HDU 1429 胜利大逃亡(续) (BFS+位压缩)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1429 胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others)  ...

  2. HDU1253 胜利大逃亡【BFS】

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

  3. hdu 1429 胜利大逃亡(续) bfs+状态压缩

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

  4. HDU 胜利大逃亡(BFS)

    HDOJ 1253 胜利大逃亡 (BFS) Problem Description BFS 完整代码 Problem Description Ignatius被魔王抓走了,有一天魔王出差去了,这可是I ...

  5. 胜利大逃亡(BFS)

    题目: 胜利大逃亡 Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会. 魔王住在一个城堡里,城堡是一个A*B*C的立方体,可以被表示成A个B*C的矩阵,刚开始Ign ...

  6. hdu 1253 胜利大逃亡(BFS)

    题目链接:点击链接 三维的BFS,刚开始一直超内存,超无语......  改了n多次终于AC了 #include <iostream> #include <stdio.h> # ...

  7. HDU - 1429 胜利大逃亡(续) (BFS+状压)

    题目链接 思路 因为新拿到一把钥匙所以相同位置可以重复走,一共10把钥匙二进制表示拿到的钥匙,判断下个位置是否可以走. #include <bits/stdc++.h> const int ...

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

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

  9. BFS——1253 胜利大逃亡

    1253 胜利大逃亡 文章目录 1253 胜利大逃亡 题意: 思路: 将BFS原来二维的部分改成三维,其余部分均不变即可. 注: 用cin读入要关流,否则会超时 读入优化代码: std::ios::s ...

最新文章

  1. priority_queue 结构体的优先级设置
  2. 万能的Python,不仅能开发效率高,还能绘画各种漫画图像
  3. WPF:仿WIN7窗体打开关闭效果
  4. 继承(instanceof :比较运算符;不仅运行父类方法,也运行子类独有的方法)
  5. 腾讯游戏安全报告:定制外挂占比过半 游戏黑产资产惊人
  6. tuxedo连接mysql,tuxedo详细安装的步骤.doc
  7. 详解依存树的来龙去脉及用法
  8. 正点原子 STM32芯片解读 M3_Bath
  9. 《嵌入式-STM32开发指南》第三部分 外设篇 - 第5章 光敏传感器
  10. 【好玩的应用】QQ连连看辅助工具
  11. python怎么计算相关系数_相关系数怎么算(python如何计算相关系数与协方差)
  12. android x86触屏驱动下载,农步祥作品 - 使用台式机和触摸屏玩Android X86 [Soomal]
  13. ionic学习(十一):页面下拉刷新(Refresher)
  14. SpringBoot替换jar包中引用的jar包(Unable to open nested entry ‘BOOT-INF/lib/**.jar‘. It has been compressed)
  15. shap 解释理赔时效模型特征
  16. 多线程应用_左圆右方
  17. 机器人系统常用仿真软件介绍效果与评价指标
  18. Oracle基础操作
  19. python可以用来写什么工具_python写工具
  20. 【S0020】【素材】梦幻抽象设计感海报PSD源文件

热门文章

  1. ROS学习笔记(一)——软件版本的选择
  2. Web前端开发最佳实践(3):前端代码和资源的压缩与合并
  3. 2014-06-13 jq chart
  4. [置顶] Oracle数据操作和控制语言详解
  5. PLSQL的中文乱码显示全是问号
  6. 【小记事】电脑命令行开WiFi
  7. BoneCP主要配置参数
  8. 1199: [HNOI2005]汤姆的游戏 - BZOJ
  9. 用户控件与自定义控件
  10. [Android]Eclipse连不上模拟器的问题[emulator-5554 disconnected](转)