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 ; }