题意 : 中文题不详述。
思路 :因为还牵扯到层的问题,所以用三维的解决,不过这个还是很简单的BFS,六个方向搜一下就可以了,一开始交的时候老是超时,怎么改都不对,后来看了一个人写的博客,他说用C++交300ms,G++交600ms,我就改成C++交了,果然AC了,不过。。。。用了900ms。。。。。我也懒得改了,也不知道为什么G++交超时
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <iostream>
#include <algorithm>
#include <stdlib.h>
#include <queue> using namespace std ; int mapp[][][] ;
bool vis[][][] ;
int dir[][] = {{,,},{-,,},{,,},{,-,},{,,},{,,-}} ;
int A, B, C,T ;
int sum ;
struct node
{
int x ;
int y ;
int z ;
int timee ;
} temp,temp1 ; void BFS()
{
queue<node>que ;
memset(vis,false,sizeof(vis)) ;
vis[][][] = true ;
temp.x = ,temp.y = ,temp.z = ;
temp.timee = ;
que.push(temp) ;
while(!que.empty())
{
node temp1 = que.front() ;
que.pop() ;
if(temp1.x == A- && temp1.y == B- && temp1.z == C-)
{
sum = temp1.timee;
return ;
}
for(int i = ; i < ; i++)
{
int xx = temp1.x+dir[i][] ;
int yy = temp1.y+dir[i][] ;
int zz = temp1.z+dir[i][] ;
if(!vis[xx][yy][zz] && mapp[xx][yy][zz] == && xx >= && xx < A && yy >= && yy < B && zz >= && zz < C)
{
temp.x = xx ;
temp.y = yy ;
temp.z = zz ;
temp.timee=temp1.timee+;
vis[xx][yy][zz] = true ;
que.push(temp) ;
}
}
}
}
int main()
{
int K ;
scanf("%d",&K) ;
while(K--)
{
sum = ;
memset(mapp,,sizeof(mapp)) ;
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",&mapp[i][j][k]) ;
BFS();
if(sum > T)
printf("-1\n") ;
else printf("%d\n",sum) ;
}
return ;
}