现在的位置: 首页 > 综合 > 正文

UVA 532 – Dungeon Master

2013年08月18日 ⁄ 综合 ⁄ 共 1303字 ⁄ 字号 评论关闭

                       还是比着葫芦画瓢,按照UVA439的思路,只是把二维的数组改成三维的,因为对u的计算马虎了,、wa了6,7次,,55555555,太马虎了。

#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;
int dist[35][35][35],vis[35][35][35],q[50003],m,r,c;
int dx[]= {1,-1,0,0,0,0};
int dy[]= {0,0,1,-1,0,0};
int dz[]= {0,0,0,0,1,-1};
int x1,y1,z1,x2,y2,z2;
char maze[35][35][35];
void bfs(int x,int y,int z)
{
    int front=0,rear=0,d,u;
    u=z*(r*c)+y*c+x;
    vis[z][y][x]=1;
    dist[z][y][x]=0;
    q[rear++]=u;
    while(front<rear)
    {
        u=q[front++];
        z=u/(r*c);
        y=(u-(r*c)*z)/c;
        x=(u-(r*c)*z)%c;
        for(d=0; d<6; d++)
        {
            int nx=x+dx[d],ny=y+dy[d],nz=z+dz[d];
            if(nx>=0&&nx<c&&ny>=0&&ny<r&&nz>=0&&nz<m&&!vis[nz][ny][nx]&&maze[nz][ny][nx]!='#')
            {
                int v=nz*(r*c)+ny*c+nx;
                q[rear++]=v;
                vis[nz][ny][nx]=1;
                dist[nz][ny][nx]=dist[z][y][x]+1;
                if(nx==x2&&ny==y2&&nz==z2)
                return ;
            }
        }
    }
}
int main()
{
    
    while(scanf("%d%d%d",&m,&r,&c)&&(m||r||c))
    {
        memset(dist,0,sizeof(dist));
        memset(vis,0,sizeof(vis));
        getchar();
        for(int i=0; i<m; i++)
        {
            for(int j=0; j<r; j++)
            {
                for(int k=0; k<c; k++)
                {
                    scanf("%c",&maze[i][j][k]);
                    if(maze[i][j][k]=='S')
                    {
                        x1=k;
                        y1=j;
                        z1=i;
                    }
                    else if(maze[i][j][k]=='E')
                    {
                        x2=k;
                        y2=j;
                        z2=i;
                    }
                }
                getchar();
            }
            getchar();
        }
        bfs(x1,y1,z1);
        /* for(int i=0;i<m;i++)
         {
             for(int j=0;j<r;j++)
             {
                 for(int k=0;k<c;k++)
                 printf("%d ",dist[i][j][k]);
                 putchar('\n');
             }
         }*/
        if(vis[z2][y2][x2]==1)
            printf("Escaped in %d minute(s).\n",dist[z2][y2][x2]);
        if(vis[z2][y2][x2]==0)
            printf("Trapped!\n");
    }
    return 0;
}

抱歉!评论已关闭.