九度教程第86题
C语言源码:[cpp]
#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)
{
 
补充:软件开发 , C++ ,
- 更多C/C++疑问解答:
- 关于c++的cout输出的问题。
- 在学校里学过C和C++,不过学的很一般,现在自学C#,会不会很难?
- 全国计算机二级C语言笔试题
- 已知某树有2个2度结点,3个3度结点,4个4度结点,问有几个叶子结点?
- c++数据结构内部排序问题,整数排序
- 2012九月计算机二级C语言全国题库,,急求急求
- 如果assert只有一个字符串作为参数,是什么意思呢?
- C语言中,哪些运算符具有左结合性,哪些具有右结合性,帮忙总结下,谢谢了!
- 为什么用结构体编写的程序输入是,0输不出来啊~~~
- 将IEEE—754的十六进制转化为十进制浮点类型,用C或C++都行,多谢各位大侠啊,非常感谢!
- 为什么这个程序求不出公式?
- 这个链表倒置的算法请大家分析下
- c语言函数库调用
- C语言unsigned int纠错
- C语言快排求解啊