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 ;
}
原文地址:https://www.cnblogs.com/xiaohongmao/p/2541185.html