HDU 1240

时间:2023-03-09 20:05:42
HDU 1240
 #include <iostream>
#include <cstdio>
using namespace std; const int MAX=; char maze[MAX][MAX][MAX]; struct {
int i,j,k;
}beg,des,que[],tmp,pushed;
int f,l;
char str[],n;
bool vis[MAX][MAX][MAX];
int dir[][]={,,,-,,,,,,,-,,,,,,,-}; bool ok(int i,int j,int k){
if(i<||i>=n||j<||j>=n||k<||k>=n||vis[i][j][k]||maze[i][j][k]=='X')
return false;
return true;
} bool bfs(){
int step=; int ti,tj,tk;
bool flag=false;
while(f<l){
int size=l-f;
step++;
while(size--){
tmp=que[f++];
if(tmp.i==des.i&&tmp.j==des.j&&tmp.k==des.k){
flag=true;
break;
}
for(int i=;i<;i++){
ti=tmp.i+dir[i][];
tj=tmp.j+dir[i][];
tk=tmp.k+dir[i][];
if(ok(ti,tj,tk)){
vis[ti][tj][tk]=true;
pushed.i=ti; pushed.j=tj; pushed.k=tk;
que[l++]=pushed;
}
}
}
if(flag) break;
}
if(flag){
printf("%d %d\n",n,step-);
return true;
}
return false;
} int main(){
while(scanf("%s %d",str,&n)!=EOF){
for(int i=;i<n;i++){
for(int j=;j<n;j++)
cin>>maze[i][j];
}
// cout<<"NO"<<endl;
scanf("%d%d%d",&beg.j,&beg.k,&beg.i);
scanf("%d%d%d",&des.j,&des.k,&des.i);
cin>>str;
// cout<<"YES"<<endl;
memset(vis,false,sizeof(vis));
f=l=;
if(beg.i==des.i&&beg.j==des.j&&beg.k==des.k){
printf("%d 0\n",n);
continue;
}
vis[beg.i][beg.j][beg.k]=true;
que[l++]=beg;
if(!bfs())
printf("NO ROUTE\n");
}
return ;
}