题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1240
BFS水题,注意x,y,z的顺序。
#include<iostream>
#include<queue>
#include<cstring>
#include<algorithm>
using namespace std;
struct node
{
int x,y,z,time;
};
char s[10];
char map[15][15][15];
int vis[15][15][15];
int n,a,b,c,d,e,f,flag;
int dx[]={1,-1,0,0,0,0};
int dy[]={0,0,1,-1,0,0};
int dz[]={0,0,0,0,1,-1};
void bfs()
{
int ans;
node vw,vn;
queue<node>fuck;
vn.x=a;
vn.y=b;
vn.z=c;
vn.time=0;
fuck.push(vn);
while(!fuck.empty())
{
vn=fuck.front();
ans=vn.time;
fuck.pop();
if(vn.x==d&&vn.y==e&&vn.z==f)
{
flag=1;
break;
}
else
{
int p;
for(p=0;p<6;p++)
{
vw.x=vn.x+dx[p];
vw.y=vn.y+dy[p];
vw.z=vn.z+dz[p];
if(vw.x>=0&&vw.y>=0&&vw.z>=0&&vw.x<n&&vw.y<n&&vw.z<n&&map[vw.x][vw.y][vw.z]=='O'&&!vis[vw.x][vw.y][vw.z])
{
vis[vw.x][vw.y][vw.z]=1;
vw.time=vn.time+1;
fuck.push(vw);
}
}
}
}
if(flag)
cout<<n<<" "<<ans<<endl;
else
cout<<"NO ROUTE"<<endl;
}
int main()
{
while(cin>>s)
{
int i,j,k;
cin>>n;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
for(k=0;k<n;k++)
cin>>map[k][j][i];
cin>>a>>b>>c>>d>>e>>f;
memset(vis,0,sizeof(vis));
cin>>s;
flag=0;
bfs();
}
return 0;
}