HDU 1240 Asteroids!

 

http://acm.hdu.edu.cn/showproblem.php?pid=1240

给这道题跪了,z是x,x是y,y是z,囧

View Code
#include <iostream>

using namespace std ;

char map[15][15][15] ;

int dp[15][15][15] ;

int q[15*15*15][3] ;

int n ;

int sx,sy,sz ;

int ex,ey,ez ;

void bfs()

{

    int x,y,z,xx,yy,zz ;

    int front=0,rear=1 ;

    int tab[][3]={1,0,0,-1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1} ;

    q[0][0]=sx,q[0][1]=sy,q[0][2]=sz ;

    dp[sx][sy][sz]=0 ;

    while(front<rear)

    {

        x=q[front][0],y=q[front][1],z=q[front][2] ;

        front++ ;

        for(int i=0;i<6;i++)

        {

            xx=x+tab[i][0],yy=y+tab[i][1],zz=z+tab[i][2] ;

            if(xx<0 || xx==n)continue ;

            if(yy<0 || yy==n)continue ;

            if(zz<0 || zz==n)continue ;

            if(map[zz][xx][yy]=='X')continue ;

            if(dp[xx][yy][zz]!=-1)continue ;

            dp[xx][yy][zz]=dp[x][y][z]+1 ;

            q[rear][0]=xx,q[rear][1]=yy,q[rear][2]=zz ;

            rear++ ;

        }

    }

}

int main()

{

    while(~scanf("%*s%d",&n))

    {

        for(int i=0;i<n;i++)

            for(int j=0;j<n;j++)

                scanf("%s",map[i][j]) ;

        scanf("%d%d%d",&sx,&sy,&sz) ;

        scanf("%d%d%d%*s",&ex,&ey,&ez) ;

        memset(dp,-1,sizeof(dp)) ;

        bfs() ;

        if(dp[ex][ey][ez]==-1)

            puts("NO ROUTE") ;

        else

            printf("%d %d\n",n,dp[ex][ey][ez]) ;

    }

    return 0 ;

}

 

你可能感兴趣的:(HDU)