poj 2251

来源:互联网 发布:php sql 防注入函数 编辑:程序博客网 时间:2024/05/29 02:09

此题用到了三维数组,其实很简单,虽然做了这么久!

附上代码:

#include<stdio.h>#include<string.h>#define N 30+10char s[N][N][N];int vis[N][N][N],dis[N][N][N];int t,l,r,c,i1,j1,k1,i2,j2,k2;int mov1[6]={1,0,0,0,0,-1};int mov2[6]={0,0,1,0,-1,0};int mov3[6]={0,1,0,-1,0,0};struct Point{    int z;int x;int y;}q[10000];int bfs(int z,int x,int y){   int i,j,k,tz,tx,ty;   int x1,y1,z1;   int Front,rear;   Front=rear=0;   vis[z][x][y]=1;   q[rear].z=z;   q[rear].x=x;   q[rear].y=y;   rear++;   while(Front<rear)   {       z1=q[Front].z;       x1=q[Front].x;       y1=q[Front].y;       if(z1==i2&&x1==j2&&y1==k2)       {            return 1;       }       Front++;       for(i=0;i<6;i++)       {           tz=z1+mov1[i];           tx=x1+mov2[i];           ty=y1+mov3[i];           if(tz>=0&&tz<l&&tx>=0&&tx<r&&ty>=0&&ty<c&&!vis[tz][tx][ty]&&s[tz][tx][ty]!='#')           {                vis[tz][tx][ty]=1;                dis[tz][tx][ty]=dis[z1][x1][y1]+1;                q[rear].z=tz;                q[rear].x=tx;                q[rear].y=ty;                rear++;           }       }   }   return 0;}int main(){    int i,j,k,n,m;    while(scanf("%d%d%d",&l,&r,&c)==3&&(l||r||c))    {        getchar();        memset(s,'\0',sizeof(s));        for(i=0;i<l;i++)        {            for(j=0;j<r;j++)            {                for(k=0;k<c;k++)                {                    scanf("%c",&s[i][j][k]);                    if(s[i][j][k]=='S')                    {                        i1=i;j1=j;k1=k;                    }                    if(s[i][j][k]=='E')                    {                        i2=i;j2=j;k2=k;                    }                }                getchar();            }            getchar();        }       memset(vis,0,sizeof(vis));       memset(dis,0,sizeof(dis));       if(!bfs(i1,j1,k1))           printf("Trapped!\n");       else           printf("Escaped in %d minute(s).\n",dis[i2][j2][k2]);    }    return 0;}


0 0
原创粉丝点击