胜利大逃亡

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 24608    Accepted Submission(s): 9427
Problem Description
Ignatius被魔王抓走了,有一天魔王出差去了,这但是Ignatius逃亡的好机会.



魔王住在一个城堡里,城堡是一个A*B*C的立方体,能够被表示成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
 
Run ID Submit Time Judge Status Pro.ID Exe.Time Exe.Memory Code Len. Language Author
10887454 2014-06-18 09:50:19 Time Limit Exceeded

pid=1253">1253

2000MS 944K 1328 B G++

user=Changmu">长木

10887453 2014-06-18 09:49:37 Accepted 1253 1484MS 996K 1328 B C++ 长木

同一段代码提交时选用不同的编译器结果区别这么大。

#include <cstdio>
#include <queue>
using std::queue;
int a, b, c, times;
int map[52][52][52];
bool vis[52][52][52];
const int mov[][3] = {
0, 0, 1, 0, 1, 0,
1, 0, 0, 0, 0, -1,
0, -1, 0, -1, 0, 0
};
struct Node{
int x, y, z, steps;
};
queue<Node> Q; bool check(Node k){
if(k.x < 0 || k.y < 0 || k.z < 0 ||
k.x >= a || k.y >= b || k.z >= c) return 0;
if(vis[k.x][k.y][k.z] || map[k.x][k.y][k.z])
return 0;
return 1;
} int BFS(){
while(!Q.empty()) Q.pop();
Node temp, now = {0};
vis[0][0][0] = 1;
if(a == b && a == c && a == 1) return 0;
Q.push(now);
while(!Q.empty()){
now = Q.front();
Q.pop(); if(now.steps == times) continue; for(int i = 0; i < 6; ++i){
temp = now; ++temp.steps;
temp.x += mov[i][0];
temp.y += mov[i][1];
temp.z += mov[i][2];
if(check(temp)){
if(temp.x == a-1 && temp.y == b-1 && temp.z == c-1)
return temp.steps;
vis[temp.x][temp.y][temp.z] = 1;
Q.push(temp);
}
}
}
return -1;
} int main(){
int t;
scanf("%d", &t);
while(t--){
scanf("%d%d%d%d", &a, &b, &c, ×);
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]);
vis[i][j][k] = 0;
} printf("%d\n", BFS());
}
return 0;
}

HDU 1253 胜利大逃亡 NYOJ 523【BFS】的更多相关文章

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

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

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

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

  3. HDU 1253 胜利大逃亡(三维BFS)

    点我看题目 题意 : 中文题不详述. 思路 :因为还牵扯到层的问题,所以用三维的解决,不过这个还是很简单的BFS,六个方向搜一下就可以了,一开始交的时候老是超时,怎么改都不对,后来看了一个人写的博客, ...

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

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

  5. HDU 1429 胜利大逃亡(续)(bfs+状态压缩,很经典)

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

  6. hdu 1253 胜利大逃亡 (代码详解)解题报告

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

  7. HDU 1253 胜利大逃亡 题解

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

  8. HDU 1429 胜利大逃亡(续)(bfs)

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

  9. hdu - 1240 Nightmare && hdu - 1253 胜利大逃亡(bfs)

    http://acm.hdu.edu.cn/showproblem.php?pid=1240 开始没仔细看题,看懂了发现就是一个裸的bfs,注意坐标是三维的,然后每次可以扩展出6个方向. 第一维代表在 ...

随机推荐

  1. linux——(1)初识linux

    linux有窗口管理员环境和纯文本界面环境,同时linux默认提供6个Terminal来让用户登录.crtl+alt+F1-6可自由切换.其中如果窗口管理员环境处于运行状态,那么可以按crtl+alt ...

  2. 设计模式-命令模式(Command Pattern)

    本文由@呆代待殆原创,转载请注明出处:http://www.cnblogs.com/coffeeSS/ 命令模式简述 命令模式的主要作用是将“行为请求者”和“行为实现者”解耦.举个例子,假如我们现在要 ...

  3. 取得指定Schema下的表

    MYSQL中取得指定Schema下所有表定义的SQL语句如下(假设Schema名为demoschema): SHOWTABLES FROM demoschema MSSQLServer中的系统表sys ...

  4. Sd - Hibernate

    Sd - Hibernate 附:http://blog.csdn.net/ta8210/article/details/1582162 数据库连接池实现原理 http://hi.baidu.com/ ...

  5. POJ 1740 A New Stone Game 又是博弈论配对找规律orz 博弈论 规律

    http://poj.org/problem?id=1740 这个博弈一眼看上去很厉害很高大上让人情不自禁觉得自己不会写,结果又是找规律…… 博弈一般后手胜都比较麻烦,但是主要就是找和先手的对应关系, ...

  6. 【线性筛】【质因数分解】【约数个数定理】hdu6069 Counting Divisors

    d(x)表示x的约数个数,让你求(l,r<=10^12,r-l<=10^6,k<=10^7) #include<cstdio> using namespace std; ...

  7. 【2-SAT(tarjan)】BZOJ1997-[Hnoi2010]Planar

    [题目大意]给出一张存在哈密顿回路的无向图,判断是否是平面图.[思路]首先平面图的一个性质:边数<=点数*3-6因为存在哈密顿回路,可以将回路看作是一个圆,考量不再哈密顿回路中的边.如果两天边相 ...

  8. Vue视图下

    3 Vue视图 3.5 样式绑定 class绑定 <p :class='对象'> <p :class="数组"> <p :class="{类 ...

  9. 一个简单的Spring程序

    首先,要用Eclipse开发Spring程序,需要安装Spring插件并重启Eclipse 具体操作: 新建java Project后,导入需要使用的包(提前下好Spring),Spring包包含6个 ...

  10. Problem G: 零起点学算法102——删除字符

    #include<stdio.h> #include<string.h> int main() { ],a; while(gets(ch)!=NULL) { scanf(&qu ...