HDU 1240
1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 5 const int MAX=13; 6 7 char maze[MAX][MAX][MAX]; 8 9 struct { 10 int i,j,k; 11 }beg,des,que[1100],tmp,pushed; 12 int f,l; 13 char str[15],n; 14 bool vis[MAX][MAX][MAX]; 15 int dir[6][3]={1,0,0,-1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1}; 16 17 bool ok(int i,int j,int k){ 18 if(i<0||i>=n||j<0||j>=n||k<0||k>=n||vis[i][j][k]||maze[i][j][k]=='X') 19 return false; 20 return true; 21 } 22 23 bool bfs(){ 24 int step=0; int ti,tj,tk; 25 bool flag=false; 26 while(f<l){ 27 int size=l-f; 28 step++; 29 while(size--){ 30 tmp=que[f++]; 31 if(tmp.i==des.i&&tmp.j==des.j&&tmp.k==des.k){ 32 flag=true; 33 break; 34 } 35 for(int i=0;i<6;i++){ 36 ti=tmp.i+dir[i][0]; 37 tj=tmp.j+dir[i][1]; 38 tk=tmp.k+dir[i][2]; 39 if(ok(ti,tj,tk)){ 40 vis[ti][tj][tk]=true; 41 pushed.i=ti; pushed.j=tj; pushed.k=tk; 42 que[l++]=pushed; 43 } 44 } 45 } 46 if(flag) break; 47 } 48 if(flag){ 49 printf("%d %d\n",n,step-1); 50 return true; 51 } 52 return false; 53 } 54 55 56 int main(){ 57 while(scanf("%s %d",str,&n)!=EOF){ 58 for(int i=0;i<n;i++){ 59 for(int j=0;j<n;j++) 60 cin>>maze[i][j]; 61 } 62 // cout<<"NO"<<endl; 63 scanf("%d%d%d",&beg.j,&beg.k,&beg.i); 64 scanf("%d%d%d",&des.j,&des.k,&des.i); 65 cin>>str; 66 // cout<<"YES"<<endl; 67 memset(vis,false,sizeof(vis)); 68 f=l=0; 69 if(beg.i==des.i&&beg.j==des.j&&beg.k==des.k){ 70 printf("%d 0\n",n); 71 continue; 72 } 73 vis[beg.i][beg.j][beg.k]=true; 74 que[l++]=beg; 75 if(!bfs()) 76 printf("NO ROUTE\n"); 77 } 78 return 0; 79 }