| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
就不能用递归做的???我知道这个递归有问题,但是不知道怎么改这个递归# include <stdio.h>
# include <string.h>
# define MAXN 31
int dr[6][3]={{0,0,1},{0,0,-1},{0,1,0},{0,-1,0},{1,0,0},{-1,0,0}};
int ei,ej,ek,si,sj,sk,count;
int mark[MAXN][MAXN][MAXN];
char map[MAXN][MAXN][MAXN];
int s,r,c,flag;
void bfs(int z,int x,int y)
{
int zz,xx,yy,i;
for (i=0;i<=5;i++)
{
zz=z+dr[i][0];
xx=x+dr[i][1];
yy=y+dr[i][2];
if (zz==ei && xx==ej && yy==ek)
{
flag=1;
count++;
printf ("Escaped in %d minute(s).\n",count);
return;
}
if (zz<0 || zz>s-1 || xx<0 || xx>r-1 || yy<0 || yy>c-1)continue;
if (map[zz][xx][yy]=='.' && mark[zz][xx][yy]==0)
{
count++;
mark[zz][xx][yy]=1;
bfs(zz,xx,yy);
}
}
}
int main()
{
int i,j,k;
while (scanf ("%d%d%d",&s,&r,&c))
{
if (r==0 && c==0 && s==0)break;
memset(mark,0,sizeof(mark));
count=0;flag=0;
for (i=0;i<=s-1;i++)
for (j=0;j<=r-1;j++)
{
scanf ("%s",map[i][j]);
}
for (i=0;i<=s-1;i++)
for (j=0;j<=r-1;j++)
for (k=0;k<=c-1;k++)
{
if (map[i][j][k]=='#')
mark[i][j][k]=1;
if (map[i][j][k]=='S')
{
si=i;
sj=j;
sk=k;
mark[i][j][k]=1;
}
if (map[i][j][k]=='E')
{
ei=i;
ej=j;
ek=k;
}
}
bfs(si,sj,sk);
if (flag==0)
printf ("Trapped!\n");
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator