hdu 1253 胜利大逃亡 BFS
来源:互联网 发布:截面数据回归分析实例 编辑:程序博客网 时间:2024/06/02 09:31
Description
魔王住在一个城堡里,城堡是一个A*B*C的立方体,可以被表示成A个B*C的矩阵,刚开始Ignatius被关在(0,0,0)的位置,离开城堡的门在(A-1,B-1,C-1)的位置,现在知道魔王将在T分钟后回到城堡,Ignatius每分钟能从一个坐标走到相邻的六个坐标中的其中一个.现在给你城堡的地图,请你计算出Ignatius能否在魔王回来前离开城堡(只要走到出口就算离开城堡,如果走到出口的时候魔王刚好回来也算逃亡成功),如果可以请输出需要多少分钟才能离开,如果不能则输出-1.
Input
特别注意:本题的测试数据非常大,请使用scanf输入,我不能保证使用cin能不超时.在本OJ上请使用Visual C++提交.
Output
Sample Input
13 3 4 200 1 1 10 0 1 10 1 1 11 1 1 11 0 0 10 1 1 10 0 0 00 1 1 00 1 1 0
Sample Output
11
思路:我的第一个三维BFS就这样送给了这道题,其实这个题并不难,也是简单的bfs模板吧,中间有一块小剪枝,但这个题不
剪枝一样可以过,因为是立体的所以只能六个方向的搜索,所以如果走到一点该点的坐标为(x,y,z),目标坐标为
(a-1,b-1,c-1),如果abs(x-a+1+y-b+1+z-c+1)+step>t那么一定不满足条件了,abs(x-a+1+y-b+1+z-c+1)为从x,y,z到目标
点的最小值,如果最小值都满足那么我理应给它剪掉的;
ac代码:
#include <stdio.h>
#include <string.h>
#include <queue>
using namespace std;
const int N = 55;
int map[N][N][N];
int vis[N][N][N];
int tx[] = {1,-1,0,0,0,0};
int ty[] = {0,0,1,-1,0,0};
int tz[] = {0,0,0,0,1,-1};
int a,b,c,t,ans;
struct Node
{
int x,y,z,step;
};
int abs(int x)//???
{
return x<0?-x:x;
}
int check(int i,int j,int k)//??????
{
if(i<0 || j<0 || k<0 || i>=a || j>=b || k>=c || map[i][j][k])
return 0;
return 1;
}
int bfs(int x,int y,int z)
{
int i;
queue<Node> Q;
Node p,q;
p.x = x;
p.y = y;
p.z = z;
p.step = 0;
vis[x][y][z] = 1;
Q.push(p);
while(!Q.empty())
{
p = Q.front();
Q.pop();
if(p.x == a-1 && p.y == b-1 && p.z==c-1 && p.step<=t)
return p.step;
for(i = 0;i<6;i++)
{
q = p;
q.x+=tx[i];
q.y+=ty[i];
q.z+=tz[i];
if(!vis[q.x][q.y][q.z] && check(q.x,q.y,q.z))
{
q.step++;
vis[q.x][q.y][q.z] = 1;
if(abs(q.x-a+1)+abs(q.y-b+1)+abs(q.z-c+1)+q.step>t)
continue;
Q.push(q);
}
}
}
return -1;
}
int main()
{
int cas;
scanf("%d",&cas);
while(cas--)
{
int i,j,k;
scanf("%d%d%d%d",&a,&b,&c,&t);
memset(map,0,sizeof(map));
memset(vis,0,sizeof(vis));
for(i = 0;i<a;i++)
for(j = 0;j<b;j++)
for(k = 0;k<c;k++)
scanf("%d",&map[i][j][k]);
ans = bfs(0,0,0);
printf("%d\n",ans);
}
return 0;
}
- hdu 1253胜利大逃亡 bfs
- hdu 1253 胜利大逃亡 BFS
- [BFS] hdu 1253 胜利大逃亡
- hdu 1253 胜利大逃亡 (三维bfs)
- hdu 1253 胜利大逃亡 (bfs)
- hdu 1253 胜利大逃亡(BFS)
- HDU 1253 胜利大逃亡(BFS)
- HDU-1253 胜利大逃亡 (BFS)
- hdu 1253 胜利大逃亡 bfs
- hdu 1253bfs胜利大逃亡
- HDU 1253 胜利大逃亡 (BFS,剪枝)
- hdu 1253 胜利大逃亡(bfs)
- HDU 1253 胜利大逃亡(BFS)
- HDU 1253 胜利大逃亡(BFS)
- HDU 1253 胜利大逃亡 三维BFS
- HDU 1253 胜利大逃亡 【BFS】
- HDU 1253 -- 胜利大逃亡 bfs
- HDU--1253胜利大逃亡【BFS】
- 生活随笔:我在百度阅读挣的20元
- uva 580 Critical Mass(递推)
- 简单button样式的设置(不是直接将背景设置为图片,而是设置背景的颜色)
- Android—RadioButton(单选框)和CheckBox(复选框)
- 我的hibernate学习之旅(2)
- hdu 1253 胜利大逃亡 BFS
- 学习嵌入式的第一天
- 熟练使用java集合001 总览
- try-catch-finally块中的退出语句
- E:in-range伪类选择器与E:out-of-range伪类选择器
- python字典为什么要用clear方法
- 网络库封装
- mysql通过job任务调度(event)执行存储过程
- 2016年10月9号以后支付宝的转账的标准