三维bfs

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

胜利大逃亡

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 25112    Accepted Submission(s): 9609

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&
lt;=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
 

代码:

#include <stdio.h>
#include <string.h> int map[60][60][60];
int vt[60][60][60] ; struct N
{
int x, y, z;
int cnt; }s[210000], e, f; int xx[6]={0, 0, 0, 0, 1, -1};
int yy[6]={0, 0, -1, 1, 0, 0};
int zz[6]={1, -1, 0, 0, 0, 0}; int a, b, c, tt; void bfs()
{
int i, j=0, k=0 ;
int flag = 0; e.x = 0;
e.y = 0;
e.z = 0;
e.cnt = 0; s[k++] = e;
vt[0][0][0] =1 ; while(j < k )
{
e = s[j++];
if(e.x==a-1 && e.y==b-1 && e.z==c-1 )
{
if(e.cnt <= tt)
{
printf("%d\n", e.cnt );
return ;
}
else
{
printf("-1\n");
return ;
}
} for(i=0; i<6; i++)
{
f.x = e.x + xx[i];
f.y = e.y + yy[i];
f.z = e.z + zz[i]; if( f.x>=0&&f.x<a &&f.y>=0&&f.y<b && f.z>=0 &&f.z<c&& vt[f.x][f.y][f.z]==0 && map[f.x][f.y][f.z]==1 )
{
f.cnt = e.cnt + 1;
s[k++] = f;
vt[f.x][f.y][f.z]=1;
}
}
}
printf("-1\n"); /* if(flag==1 && sum <tt )
{
printf("%d\n", sum );
}
else
{
printf("-1\n");
} */
} int main()
{
int t;
int i, j, k,ff; scanf("%d", &t) ;
while(t--)
{
memset(map, 0, sizeof(map ));
memset(vt, 0, sizeof(vt ));
k = 0; scanf("%d %d %d %d", &a, &b, &c, &tt ); for(i=0; i<a; i++)
{
for(j=0; j<b; j++)
{
for(k=0; k<c; k++)
{
scanf("%d", &ff );
if(ff==1)
map[i][j][k] = 0; //memset 为0,避免冲突修改一下,1代表路,0 代表墙
else
{
map[i][j][k] = 1;
}
}
}
} if(map[a-1][b-1][c-1]==0 || a+b+c>tt) //出口处是墙 或者 可能到达出口的最短时间都比妖怪回来的时间长必然逃不了
{
printf("-1\n");
continue;
}
bfs(); }
return 0;
}
 
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

“三维bfs” 的相关文章

vue如何将页面转成图片 - web开发

这篇文章主要介绍了vue如何将页面转成图片的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue如何将页面转成图片文章都会有所收获,下面我们一起来看看吧。 随着前端开发的快速发展,现在越来越多的人开始注重如何将前...

【100%通过率】华为OD机试真题 Java 实现【打印机队列】【2022.11 Q4 新题】

     所有题目均有五种语言实现。C语言实现目录、C++ 实现目录、Python实现目录、Java实现目录、JavaScript实现目录...

排序概念

数据表:待排序数据元素的有很集合 排序码:通常数据元素有多个个属性域,即多少个数据成员组成,其中有一个属性域可用来区分元素,作为排序依据。 稳定性:2个元素R1,R2,它们的排序码K1=k2,在排序前R1在R2前,排序后R1仍在R2之前,则称这个排序方法是稳...

isinstance判断对象

>>> isinstance(u'\0xAB',str) False >>> isinstance(u'\0xAB',int) False >>> isinstance(u'\0xAB',unicode) True...

C语言课程设计题目介绍(10个标准题目)

《C语言课程设计》 1、学生成绩管理系统 学生数据由学号、姓名、班级、三门课数学、英语、计算机的成绩和平均成绩构成。 实现功能包括 1添加学生的记录 2查询学生分别按学号和姓名 3对学生数据排序分别按平均成绩和计算机成绩的降序 4删除学生记录 5修改学生记录 6班级成绩分析各...

POJ 3544 Journey with Pigs (贪心&排序不等式)

Journey with Pigs http://poj.org/problem?id=3544 Time Limit:  1000MS Memory Limit: 65536K Description Farmer John has a p...