当前位置: 代码迷 >> 编程 >> 9度教程第86题
  详细解决方案

9度教程第86题

热度:3310   发布时间:2013-02-26 00:00:00.0
九度教程第86题

题目地址: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");		}	}}


  相关解决方案