本题要注意输入的起点与终点的坐标,其他的没太有需要注意的。
#include<iostream>
#include<string>
#include<cstring>
#include<queue>
#include<cstdio>
using namespace std;
int map[15][15][15];
int vis[15][15][15];
int sx,sy,sz,ex,ey,ez;
int n,ans;
int dx[]={0,0,1,-1,0,0};
int dy[]={1,-1,0,0,0,0};
int dz[]={0,0,0,0,1,-1};
struct A
{
int x,y,z,step;
};
bool bfs(int x,int y,int z,int num)
{
queue<A> ast;
int flag=0;
A a;
a.x=x; a.y=y; a.z=z; a.step=num;
ast.push(a);
while(!ast.empty())
{
a=ast.front();
ast.pop();
if(a.x==ex&&a.y==ey&&a.z==ez)
{
ans=ans>a.step?a.step:ans;
flag=1;
//cout<<n<<' '<<a.step<<endl;
//return true;
}
for(int i=0;i<6;i++)
{
A b;
b.x=a.x+dx[i];b.y=a.y+dy[i];b.z=a.z+dz[i];
if(b.x>=0&&b.x<n&&b.y>=0&&b.y<n&&b.z>=0&&b.z<n&&map[b.z][b.x][b.y]&&!vis[b.z][b.x][b.y])
{
b.step=a.step+1;
vis[b.z][b.x][b.y]=1;
ast.push(b);
}
}
}
//if(!bfs(sx,sy,sz,0))
if(!flag)
cout<<"NO ROUTE"<<endl;
else
cout<<n<<' '<<ans<<endl;
//return false;
}
int main()
{
//freopen("in.txt","r",stdin);
string a;
char x;
while(cin>>a>>n)
{
memset(map,0,sizeof(map));
memset(vis,0,sizeof(vis));
ans=1000000;
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
for(int k=0; k<n; k++)
{
cin>>x;
if(x=='O')
map[i][j][k]=1;
}
cin>>sy>>sx>>sz;
cin>>ey>>ex>>ez;
cin>>a;
bfs(sx,sy,sz,0);
}
return 0;
}