题目链接:http://poj.org/problem?id=2225
这里要注意的是,输入的是坐标x,y,z,那么这个点就是在y行,x列,z层上。
我竟然WA在了结束搜索上了,写成了输出s.step.我要调疯了。
#include <stdio.h>
#include <queue>
#include <string.h> using namespace std; struct Point
{
int x,y,z;
int step;
} points[]; char maps[][][];
bool vis[][][]; ///上下前后左右
int to[][]= {{,,},{-,,},{,,},{,-,},{,,-},{,,}}; int main()
{
char str[];
while(scanf("%s",str)!=EOF)
{
memset(vis,false,sizeof(vis)); int n;
scanf("%d",&n);
for(int i=; i<n; i++)
for(int j=; j<n; j++)
scanf("%s",maps[i][j]); int x1,y1,z1; ///x 行,y列,z层
int x2,y2,z2;
scanf("%d%d%d%d%d%d",&y1,&x1,&z1,&y2,&x2,&z2); char tmp[];
scanf("%s",tmp); queue<Point> Q;
Point s,next;
s.x = x1;
s.y = y1;
s.z = z1;
s.step = ;
Q.push(s);
vis[s.z][s.x][s.y] = true;
int ans = ;
bool flag = false; while(!Q.empty())
{
Point f;
f = Q.front();
Q.pop();
if(f.x==x2&&f.y==y2&&f.z==z2)
{
flag = true;
ans = f.step;
break;
}
for(int i=; i<; i++)
{
next.x = f.x + to[i][];
next.y = f.y + to[i][];
next.z = f.z + to[i][]; if(next.x<||next.x>=n||next.y<||next.y>=n||next.z<||next.z>=n)
continue;
if(vis[next.z][next.x][next.y]||maps[next.z][next.x][next.y]=='X')
continue; next.step = f.step + ;
//printf("%d %d %d ",next.x,next.y,next.z);
//printf("%d\n",next.step);
vis[next.z][next.x][next.y] = true;
Q.push(next);
}
}
if(flag)
printf("%d %d\n",n,ans);
else printf("NO ROUTE\n");
}
return ;
}