Problem Description
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

起始状态: 起点(0, 0, 0)
目标状态: 终点(A-1, B-1, C-1)
移动规则: r[6][3] = {{0, -1, 0}, {0, 1, 0}, {1, 0, 0}, {-1, 0, 0}, {0, 0, 1}, {0, 0, -1}};
利用规则(移动方式)生成下一层的所有状态节点(像树),并依次放入队列中,层层往下展开,直到到达终点

#include<bits/stdc++.h>
using namespace std;int K, T, A, B, C;
int r[6][3] = {{0, -1, 0}, {0, 1, 0}, {1, 0, 0}, {-1, 0, 0}, {0, 0, 1}, {0, 0, -1}};
// vis 标记坐标是否到达过, mp存放地图
int vis[55][55][55], mp[55][55][55];struct node{int x, y, z, step;
};bool check(int x, int y, int z) {  // 判断是否合法if(vis[x][y][z])  return false;if(x < 0 || x >= A) return false;if(y < 0 || y >= B) return false;if(z < 0 || z >= C) return false;if(mp[x][y][z])    return false;return true;
}void bfs() {node cur, next;queue<node> q;cur.x = cur.y = cur.z = cur.step = 0;  // 初始化起点vis[0][0][0] = 1;  // 标记q.push(cur);while(!q.empty()) {cur = q.front();q.pop();if((cur.x == A - 1) && (cur.y == B - 1) && (cur.z == C - 1)) {if(cur.step <= T) {  // 注意时间必须小于魔王回来的时间printf("%d\n", cur.step);return ;}}for(int i = 0; i < 6; i++) {next.x = cur.x + r[i][0];next.y = cur.y + r[i][1];next.z = cur.z + r[i][2];if(!check(next.x, next.y, next.z))   continue;next.step = cur.step + 1;vis[next.x][next.y][next.z] = 1;q.push(next);}}// while中遍历所有状态,若未在while中退出,则说明不可到达printf("-1\n");return ;
}int main() {scanf("%d", &K);while(K--) {memset(vis, 0, sizeof(vis));scanf("%d %d %d %d", &A, &B, &C, &T);int a, b, c, d; for(int i = 0; i < A; i++) {for(int j = 0; j < B; j++) {for(int k = 0; k < C;k++) {scanf("%d", &mp[i][j][k]);//printf("mp[%d][%d][%d] = %d\n", i, j, k, mp[i][j][k]);}}}bfs();}return 0;
}

胜利大逃亡 --- bfs记录相关推荐

  1. HDU-1253 胜利大逃亡 (BFS)

    好吧,上次刚傻完这次又傻了一次,先粘题目吧. 题目:HDU-1253 胜利大逃亡 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1253 题目: 胜利大 ...

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

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1253 Problem Description Ignatius被魔王抓走了,有一天魔王出差去了,这可是 ...

  3. HDU1253:胜利大逃亡(BFS)

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

  4. HDU_1253 胜利大逃亡(BFS)

    纠结一晚上,注意细节啊!!!(看到有很多解题报告都用<queue>,我不太喜欢用STL的东西...) My Code: #include <iostream>#include ...

  5. HDU - 1253 胜利大逃亡 BFS

    https://vjudge.net/problem/HDU-1253 AC代码 #include<cstdio> #include<iostream> #include< ...

  6. HDU 胜利大逃亡(BFS)

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

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

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

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

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

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

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

最新文章

  1. 关于Hinton团队无监督新作SimCLR的所思所想
  2. H3C 交换机S5130S软件版本升级
  3. Android OTA 升级之三:生成recovery.img
  4. js data日期初始化的5种方法
  5. es mysql 同步插件_[es和数据库怎么同步]mysql与elasticsearch实时同步常用插件及优缺点对比(ES与关系型数据库同步)...
  6. 使用EasyExcel导入导出Excel报表-JAVA解析Excel工具
  7. mysql查看innodb版本_mysql中查看innodb版本的方法
  8. Exchange Server 2016 独立部署/共存部署 (八)—— 边缘角色服务器
  9. NP、OSPF 缺省路由
  10. 127.自己开发一个 PHP 框架
  11. 2.5. 标准路由器:Zend_Controller_Router_Rewrite
  12. 数据、运营相关试题(三)【牛客网:数据运营试题广场】
  13. 用友nc java启动不了_用友NC开发本地启动客户端时界面空白问题的解决
  14. java数据库加密(druid)
  15. PPT去除页码的方法
  16. 运动会加油稿计算机学院150字,学生150字运动会加油稿
  17. macbook或mac Apple ID 更新提示连接服务器出错
  18. Visionpro工具用途中文介绍
  19. Jmeter压力测试图片上传
  20. 阿里云服务器vgn6i配置NVIDIA CUDA+cuDNN

热门文章

  1. 光学设计ZEMAX——什么是MF、RMS均方根点半径
  2. BoardCast BroadcastReceiver 基础
  3. hrbust 2366 Print rhombus
  4. Quartz 2.4.0 源码解析
  5. 向武 清华大学 计算机,哥哥保送弟弟全市第二 双胞胎同时上清华(组图)
  6. lunces_CES降温 汽车巨头回归底特律
  7. 我的 iPhone XS Max 终于装上了这款高逼格数字时钟,优秀不优秀?!
  8. 阿里面试,三面都过了,却被无理由挂了,快来一起吃瓜
  9. android实现九宫格拼图小游戏
  10. 6.6.5 住房公积金参缴记录