http://acm.hdu.edu.cn/showproblem.php?pid=1240
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
int sx,sy,sz,sum,n,ans,ex,ey,ez;
int a[6][3]={{0,0,1},{0,0,-1},{0,1,0},{0,-1,0},{1,0,0},{-1,0,0}};
char st[11][11][11];
int v[11][11][11];
struct node
{
int x,y,z,step;
};
int bfs(int x,int y,int z)
{
int i;
queue<node>q;
node cur,next;
cur.x=x;
cur.y=y;
cur.z=z;
cur.step=0;//注意这里对于步数的初始化
q.push(cur);
while(!q.empty())
{
cur=q.front();
q.pop();
if(cur.x==ex&&cur.y==ey&&cur.z==ez)
return cur.step;//
for(i=0;i<6;i++)
{
next=cur;//这里一定要注意,否则输出的结果就不对了
next.x=cur.x+a[i][0];
next.y=cur.y+a[i][1];
next.z=cur.z+a[i][2];
if(next.x>=0&&next.x<n&&next.y>=0&&next.y<n&&next.z>=0&&next.z<n&&v[next.x][next.y][next.z]==0&&st[next.x][next.y][next.z]=='O')
{
v[next.x][next.y][next.z]=1;
next.step++;
q.push(next);
}
}
}
return -1;
}
int main()
{
int i,j,z;
char s[7],e[7];
while(scanf("%s",s)!=EOF)
{
scanf("%d",&n);
getchar();
memset(v,0,sizeof(v));
for(z=0;z<n;z++)
{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
scanf("%c",&st[i][j][z]);
getchar();
}
}
scanf("%d%d%d%d%d%d",&sx,&sy,&sz,&ex,&ey,&ez);
// printf("%d %d %d\n",sx,sy,sz);
scanf("%s",e);
sum=ans=0;
v[sx][sy][sz]=1;
ans=bfs(sx,sy,sz);
if(ans>=0)
printf("%d %d\n",n,ans);
else
printf("NO ROUTE\n");
}
}