HDU-1240-Asteroids!
http://acm.hdu.edu.cn/showproblem.php?pid=1240
三维的BFS,和二维的差不多
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char map[12][12][12];
int visit[12][12][12];
int ans[12][12][12];
int n;
int dir[6][3]={{1,0,0},{-1,0,0},{0,-1,0},{0,1,0},{0,0,-1},{0,0,1}};
struct cam
{
int x;
int y;
int z;
}list[1005];
int go(int x,int y,int z)
{
if(0<=x&&x<n&&0<=y&&y<n&&0<=z&&z<n&&map[x][y][z]=='O')
return 1;
return 0;
}
int bfs(int x1,int y1,int z1,int x2,int y2,int z2)
{
int head,tail;
int xx,yy,zz;
int i;
memset(visit,0,sizeof(visit));
memset(ans,0,sizeof(ans));
visit[x1][y1][z1]=1;
ans[x1][y1][z1]=0;
map[x2][y2][z2]='O';
head=0;
tail=1;
list[0].x=x1;
list[0].y=y1;
list[0].z=z1;
while(head<tail)
{
x1=list[head].x;
y1=list[head].y;
z1=list[head].z;
if(x1==x2&&y1==y2&&z1==z2)
return ans[x2][y2][z2];
for(i=0;i<6;i++)
{
xx=x1+dir[i][0];
yy=y1+dir[i][1];
zz=z1+dir[i][2];
if(go(xx,yy,zz)&&!visit[xx][yy][zz])
{
visit[xx][yy][zz]=1;
ans[xx][yy][zz]=ans[x1][y1][z1]+1;
list[tail].x=xx;
list[tail].y=yy;
list[tail].z=zz;
tail++;
}
}
head++;
}
return -1;
}
int main()
{
int x1,y1,z1;
int x2,y2,z2;
int i,j,sol;
char s[10];
while(scanf("%s %d",s,&n)!=EOF)
{
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%s",map[i][j]);
scanf("%d%d%d",&x1,&y1,&z1);
scanf("%d%d%d",&x2,&y2,&z2);
scanf("%s",s);
sol=bfs(x1,y1,z1,x2,y2,z2);
if(sol==-1)
printf("NO ROUTE\n");
else
printf("%d %d\n",n,ans[x2][y2][z2]);
}
return 0;
}