hdu 1253 胜利大逃亡 (三维简单bfs+剪枝)
胜利大逃亡
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 21449 Accepted Submission(s): 8442
魔王住在一个城堡里,城堡是一个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
Ignatius.L
题意:有一个人要在魔王回来之前逃出城堡。1表示墙,0表示路。t表示魔王回来的时间。
感想:这题比较坑的一点是起点可以是墙,但是人能走出。而终点也可以是墙,那自然就走不出了,但是要判断。
剪枝:如果终点是门或者从起点到终点的最短时间都大于t ,直接输出 -1。
代码:
#include<cstdio>
#include<iostream>
#include<cstring>
#include<queue>
using namespace std; int maps[55][55][55];
int a,b,c,t;
struct node
{
int x,y,z;
int steps;
}start;
int dx[]={0,0,0,0,-1,1};
int dy[]={0,0,-1,1,0,0};
int dz[]={-1,1,0,0,0,0}; bool in(node &now)
{
if(now.x>=1&&now.x<=a&&now.y>=1&&now.y<=b&&now.z>=1&&now.z<=c)
return true;
else return false;
} int bfs()
{
queue<node> q;
while(!q.empty())
q.pop();
q.push(start);
maps[start.x][start.y][start.z]=1;
node cur,next;
while(!q.empty())
{
cur=q.front();
q.pop();
if(cur.x==a&&cur.y==b&&cur.z==c&&cur.steps<=t)
return cur.steps;
for(int i=0;i<6;i++)
{
next.x=cur.x+dx[i];
next.y=cur.y+dy[i];
next.z=cur.z+dz[i];
if(in(next)&&next.x==a&&next.y==b&&next.z==c&&(cur.steps+1)<=t)
return cur.steps+1;
if(in(next)&&maps[next.x][next.y][next.z]==0)
{
next.steps=cur.steps+1;
//printf("test: %d %d %d %d\n",next.x,next.y,next.z,next.steps);
maps[next.x][next.y][next.z]=1;
q.push(next);
}
}
}
return -1;
} int main()
{
int n,i,j,k,flag;
scanf("%d",&n);
getchar();
while(n--)
{
scanf("%d%d%d%d",&a,&b,&c,&t);
getchar();
for(i=1;i<=a;i++)
{
for(j=1;j<=b;j++)
for(k=1;k<=c;k++)
{
scanf("%d",&maps[i][j][k]);
}
}
start.x=start.y=start.z=1;
start.steps=0;
if(a+b+c-3>t||maps[a][b][c]==1) //剪枝
flag=-1;
else
flag=bfs();
printf("%d\n",flag);
}
return 0;
} //AC /* 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 */
8752232 |
2013-07-29 14:03:48 |
Accepted |
515MS |
896K |
C++ |
hdu 1253 胜利大逃亡 (三维简单bfs+剪枝)的更多相关文章
- hdu 1253 胜利大逃亡(简单题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1253 题目大意:在所给的时间能顺利离开城堡. #include <iostream> #i ...
- [ACM] hdu 1253 胜利大逃亡 (三维BFS)
胜利大逃亡 Problem Description Ignatius被魔王抓走了,有一天魔王出差去了,这但是Ignatius逃亡的好机会. 魔王住在一个城堡里,城堡是一个A*B*C的立方体,能够被表示 ...
- hdu 1253:胜利大逃亡(基础广搜BFS)
胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- HDU 1253 胜利大逃亡 NYOJ 523【BFS】
胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- HDU 1429 胜利大逃亡(续)(bfs+状态压缩,很经典)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1429 胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) ...
- hdu 1253 胜利大逃亡 (代码详解)解题报告
胜利大逃亡 Problem Description Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会. 魔王住在一个城堡里,城堡是一个A*B*C的立方体,可以被表示 ...
- HDU 1253 胜利大逃亡 题解
胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- HDU 1429 胜利大逃亡(续)(bfs)
胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- hdu 1253 胜利大逃亡(BFS)
题目链接:点击链接 三维的BFS,刚开始一直超内存,超无语...... 改了n多次终于AC了 #include <iostream> #include <stdio.h> # ...
随机推荐
- LINQ Enumerable 续 II
Enumerable.TakeWhile和Enumerable.SkpWhile Enumerable.TakeWhile和Enumerable.SkpWhile将通过判断条件,来获取和跳过序列. T ...
- HADOOP报错Incompatible namespaceIDs
出现这个问题的原因是因为namespaceIDs导致的 解决方案1<推荐> 1. 进入链接不上的从机 stop-all.sh关闭hadoop 2. 编辑namespaceID,路径是< ...
- 安卓手机内外SD卡互换
相信有許多人....有內置sd太小...外置sd(sdcard2或extsd)卻只能放資料.... 一些遊戲或者是影音播放軟體....根本不會去讀外置sd(sdcard2或extsd)..... 記憶 ...
- Android触摸事件的分发机制
---恢复内容开始--- 一.MotionEvent : ACTION_DOWN(下按事件).ACTION_UP(松开事件).ACTION_MOVE(移动事件) 二.三大函数 1.dispatchTo ...
- Qt5-控件-QRadioButton-单选按钮-用于从多个选项中选取一个-单选神器
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QRadioButton> ...
- Qt Quick App的两种启动模式
QQmlApplicationEngine搭配Window QQuickView搭配Item 两者不同之处在于: 使用QQuickView显示QML文档,对窗口的控制权(比如设置窗口标题.Icon.窗 ...
- phpMyAdmim无法打开或空白页面问题解决
环境:windows环境 安装方式:appserv 安装完appserv之后,发现phpMyAdmin无法打开,具体表现为输入root用户名和密码之后长时间无法进入管理页面或进入之后一片空白.这种情况 ...
- 1.3.4 try-with-resources (TWR)
其基本设想是把资源(比如文件或类似的东西)的作用域限定在代码块内,当程序离开这个代码块时,资源会被自动关闭: 要确保try-with-resources生效,正确的用法是为各个资源声明独立变量: 目前 ...
- 关于Zend Framework 2中 Zend\Session的使用
一直迷惑于zend\Session的使用,这个是Zend\Session的官方教程的中文版,http://zend-framework-2.yangfan.co/blog/556. 其中最重要的是关于 ...
- 【学习笔记】【oc】copy与mutableCopy
copy 返回一个不可变的对象: mutableCopy 返回一个可变的对象: 使用copy方法时 类必须实现:<NSCopying>协议中的-(id)copyWithZone:(NSZo ...