题目地址:http://jobdu.sinaapp.com/problem.php?cid=1040&pid=85
C语言源码:
#include<stdio.h>
int s[51][51][51];
int queue[500000][3];
int main()
{
int i,j,k,T,n,a,b,c,front,rear,num,flag;
while(scanf("%d",&n)!=EOF)
{
while(n--)
{
scanf("%d %d %d %d",&a,&b,&c,&T);
for(i=0;i<a;i++)
for(j=0;j<b;j++)
for(k=0;k<c;k++)
scanf("%d",&s[i][j][k]);
if(s[a-1][b-1][c-1]==1)
{
printf("-1\n");
continue;
}
s[0][0][0]=0;
front=0;
rear=0;
num=0;
flag=1;
queue[0][0]=0;
queue[0][1]=0;
queue[0][2]=0;
rear++;
while(front!=rear)
{
i=queue[front][0];
j=queue[front][1];
k=queue[front][2];
front++;
if(s[i][j][k]!=1)
{
s[i][j][k]=1;
if(i==a-1&&j==b-1&&k==c-1)
break;
if(i>0&&s[i-1][j][k]==0)
{
queue[rear][0]=i-1;
queue[rear][1]=j;
queue[rear][2]=k;
rear++;
}
if(i<a-1&&s[i+1][j][k]==0)
{
queue[rear][0]=i+1;
queue[rear][1]=j;
queue[rear][2]=k;
rear++;
}
if(j>0&&s[i][j-1][k]==0)
{
queue[rear][0]=i;
queue[rear][1]=j-1;
queue[rear][2]=k;
rear++;
}
if(j<b-1&&s[i][j+1][k]==0)
{
queue[rear][0]=i;
queue[rear][1]=j+1;
queue[rear][2]=k;
rear++;
}
if(k>0&&s[i][j][k-1]==0)
{
queue[rear][0]=i;
queue[rear][1]=j;
queue[rear][2]=k-1;
rear++;
}
if(k<c-1&&s[i][j][k+1]==0)
{
queue[rear][0]=i;
queue[rear][1]=j;
queue[rear][2]=k+1;
rear++;
}
}
if(front==flag)
{
flag=rear;
num++;
}
}
if(num<=T&&s[a-1][b-1][c-1]==1)
printf("%d\n",num);
else
printf("-1\n");
}
}
}