题目大意:不会看不懂中文吧?

思路:出口已知,因为有个时间限制,当然时间越短越好,所以bfs,不过写得似乎很挫1800多ms,能过,将就着看哈!大笑

代码如下:

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<queue>
using namespace std;
typedef struct
{
	int x,y,z;
	int cnt;
}mor;
struct node
{
	int x,y,z;
}zit[6]={{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}};
int map[50][50][50],book[50][50][50],a,b,c,t,flag;
bool pan(int x,int y,int z)
{
	if(x>=0&&x<a&&y>=0&&y<b&&z>=0&&z<c)
		return true;
	return false;
}

void bfs()
{
	queue<mor>que;
	mor star,now,next;
	star.x=star.y=star.z=star.cnt=0;
	while(!que.empty())
		que.pop();
	que.push(star);
	book[0][0][0]=1;
	int i,j,n;
	while(!que.empty())
	{
		now=que.front();
		que.pop();
		if(now.cnt>=t)
			return ;
		for(i=0;i<6;i++)
		{
			next.x=now.x+zit[i].x;
			next.y=now.y+zit[i].y;
			next.z=now.z+zit[i].z;
			if(pan(next.x,next.y,next.z) && !map[next.x][next.y][next.z] && !book[next.x][next.y][next.z])
			{
				book[next.x][next.y][next.z]=1;
				if(next.x==a-1&&next.y==b-1&&next.z==c-1)
				{
					flag=0;
					printf("%d\n",now.cnt+1);
					return ;
				}
				next.cnt=now.cnt+1;
				que.push(next);
			}
		}
	}
	return ;
}

int main()
{
	int i,j,k,ps;
	scanf("%d",&ps);
	while(ps--)
	{
		scanf("%d%d%d%d",&a,&b,&c,&t);
		memset(book,0,sizeof(book));
		for(i=0;i<a;i++)
		for(j=0;j<b;j++)
		for(k=0;k<c;k++)
			scanf("%d",&map[i][j][k]);
		flag=1;
		bfs();
		if(flag)
			printf("-1\n");
	}
	return 0;
}