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

特别注意:本题的测试数据非常大,请使用scanf输入,我不能保证使用cin能不超时.在本OJ上请使用Visual C++提交.
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
中文题目就不解释了
但是 这道题大坑::::::::::!!!!!!!!!!!!!!!
坑一:
门的地方可以是墙 一辈子也别想逃出来
坑二:
起点也可以是墙 但是竟然没有影响!!!!!!!!!!!!!
坑三:
当A=B=C=1时 要特别判断一下
好了其他就不说了就是一个简单的广搜
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<queue> using namespace std;
#define N 60
struct node
{
int x,y,z,temp;
}s,e;
int dis[][]={{,,},{,-,},{,,},{,,-},{,,},{-,,}};
int vis[N][N][N];
int A,B,C; int bfs()
{
queue <node>Q;
node p,q;
Q.push(s);
while(!Q.empty())
{
p=Q.front();
Q.pop();
if(p.x==e.x && p.y==e.y && p.z==e.z)
return p.temp;
for(int i=;i<;i++)
{
q.x=p.x+dis[i][];
q.y=p.y+dis[i][];
q.z=p.z+dis[i][];
if(vis[q.x][q.y][q.z]== && q.x<A&&q.x>= && q.y<B&&q.y>= && q.z<C&&q.z>=)
{
q.temp=p.temp+;
vis[q.x][q.y][q.z]=;
Q.push(q);
}
}
}
return ;
} int main()
{
int T,t;
scanf("%d",&T);
while(T--)
{
memset(vis,,sizeof(vis));
scanf("%d %d %d %d",&A,&B,&C,&t);
for(int i=;i<A;i++)
{
for(int j=;j<B;j++)
{
for(int k=;k<C;k++)
{
scanf("%d",&vis[i][j][k]);
}
}
}
s.x=s.y=s.z=s.temp=;
e.x=A-;
e.y=B-;
e.z=C-;
if(vis[e.x][e.y][e.z]==)
{
printf("-1\n");
continue;
}
if(A==B && B==C && C== && vis[][][]==)
{
printf("0\n");
continue;
}
int aa=bfs();
if(aa>t || aa==)
printf("-1\n");
else
printf("%d\n",aa);
}
return ;
}
胜利大逃亡--hdu --1253(bfs)的更多相关文章
- 胜利大逃亡 HDU - 1253
Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会. 魔王住在一个城堡里,城堡是一个A*B*C的立方体,可以被表示成A个B*C的矩阵,刚开始Ignatius被关在(0 ...
- hdu 1253 胜利大逃亡 (三维简单bfs+剪枝)
胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- [ACM] hdu 1253 胜利大逃亡 (三维BFS)
胜利大逃亡 Problem Description Ignatius被魔王抓走了,有一天魔王出差去了,这但是Ignatius逃亡的好机会. 魔王住在一个城堡里,城堡是一个A*B*C的立方体,能够被表示 ...
- HDU 1429 胜利大逃亡(续)(bfs+状态压缩,很经典)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1429 胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) ...
- HDU 1429 胜利大逃亡(续)(bfs)
胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- 胜利大逃亡(续)(bfs+状态压缩)
胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- 题目1456:胜利大逃亡(广度优先搜索BFS)
题目链接:http://ac.jobdu.com/problem.php?pid=1456 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...
- hdoj 1429 胜利大逃亡(续) 【BFS+状态压缩】
题目:pid=1429">hdoj 1429 胜利大逃亡(续) 同样题目: 题意:中文的,自己看 分析:题目是求最少的逃亡时间.确定用BFS 这个题目的难点在于有几个锁对于几把钥匙.唯 ...
- HDU 1253 胜利大逃亡(三维BFS)
点我看题目 题意 : 中文题不详述. 思路 :因为还牵扯到层的问题,所以用三维的解决,不过这个还是很简单的BFS,六个方向搜一下就可以了,一开始交的时候老是超时,怎么改都不对,后来看了一个人写的博客, ...
随机推荐
- 利用JSTL重写查询的jsp页面
利用JSTL重写Java Web MVC实例中的jsp页面 第一步:导入jstl.jar和standard.jar文件
- MongoDB最简单的入门教程之四:使用Spring Boot操作MongoDB
Spring Boot 是一个轻量级框架,可以完成基于 Spring 的应用程序的大部分配置工作.Spring Boot的目的是提供一组工具,以便快速构建容易配置的Spring应用程序,省去大量传统S ...
- OFDM、FTTx、SCTP、Ad Hoc、WSN术语简介
上课提到一些术语,下来查了一下,总结在这里. OFDM: OFDM(Orthogonal Frequency Division Multiplexing)即正交频分复用技术,实际上OFDM是MCM(M ...
- 第二周作业xml学习情况
1.xml简介 可扩展标记语言是一种很像超文本标记语言的标记语言. 它的设计宗旨是传输数据,而不是显示数据. 它的标签没有被预定义.您需要自行定义标签. 它被设计为具有自我描述性. 它是W3C的推荐标 ...
- SQLite – DISTINCT 关键字
SQLite – DISTINCT关键字 使用SQLite DISTINCT关键字与SELECT语句来消除所有重复的记录和获取唯一的记录. 可能存在一种情况,当你有多个表中重复的记录. 获取这些记录, ...
- HDU 5768Lucky7(多校第四场)容斥+中国剩余定理(扩展欧几里德求逆元的)+快速乘法
地址:http://acm.hdu.edu.cn/showproblem.php?pid=5768 Lucky7 Time Limit: 2000/1000 MS (Java/Others) M ...
- 完整卸载MySQL数据库
1. 关掉mysql服务 右键“我的电脑”,选择“管理”,打开计算机管理,选择“服务” 右键MySQL服务,选择“停止” 2. 卸载mysql程序 开始菜单->控制面板->程序和功能 3. ...
- java程序中中文没有乱码,存入数据库后中文乱码问题
jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/sys_user?useOldAliasMetadataBe ...
- tabs标签页的数据缓存
一进入tabs标签页默认就将所有标签页的数据请求到,并渲染到页面上, 这样如果数据量太大的话会渲染很久, 我的需求就是点击不同的标签时再请求数据,同时对点击过的标签页数据进行缓存,下次点击时不再重新请 ...
- noip2019——动态规划刷题历程
加粗的是值得总结的 从洛谷的普及题开始刷题: 背包式dp(有些技巧的) 1.p2639[USACO09OCT]Bessie的体重问题 -p1049取模意义下01背包 技巧:重量=价值 2.金明的预算问 ...