BFS题目,现在又做了,还是感觉这种题好玩,呵呵!刚开始没看清题目
The first coordinate in a set indicates the column. Left column = 0.
The second coordinate in a set indicates the row. Top row = 0.,弄反了,莫名其妙的WA了。。。现在就把两个坐标换了一下位置,a了,呵呵!
#include<stdio.h>
#include<string.h>
typedef struct
{
int s1[10000];
int s2[10000];
int s3[10000];
}queue;
queue que;
int head,rear;
int map[13][13][13],count[30][30][30],vis[30][30][30];
void In(int x,int y,int z)
{
que.s1[rear]=x;
que.s2[rear]=y;
que.s3[rear]=z;
rear++;
}
void Out(int *x,int *y,int *z)
{
*x=que.s1[head];
*y=que.s2[head];
*z=que.s3[head];
head++;
}
int isEmpty()
{
if(head==rear)
return 1;
else
return 0;
}
int main()
{
int i,j,k,n,v1,v2,v3,x1,y1,z1,x2,y2,z2,p1,p2,p3,m,flag;
int t1[6]={0,0,0,0,1,-1};
int t2[6]={1,-1,0,0,0,0};
int t3[6]={0,0,1,-1,0,0};
char a[10];
while(scanf("%s%d",a,&n)!=EOF)
{
getchar();
head=rear=0;
memset(vis,0,sizeof(vis));
memset(map,0,sizeof(map));
memset(count,0,sizeof(count));
for(k=0;k<n;k++)
for(i=0;i<n;i++)
{
gets(a);
for(j=0;j<n;j++)
if(a[j]=='O')
map[i][j][k]=1;
}
scanf("%d%d%d",&y1,&x1,&z1);//这里要注意哦
scanf("%d%d%d",&y2,&x2,&z2);
scanf("%s",a);
In(x1,y1,z1);
vis[x1][y1][z1]=1;
flag=1;
if(x1==x2&&y1==y2&&z1==z2)
{
printf("%d 0\n",n);
flag=0;
}
while(!isEmpty()&&flag)
{
Out(&p1,&p2,&p3);
for(m=0;m<6;m++)
{
i=p1+t1[m];j=p2+t2[m];k=p3+t3[m];
if(i>=0&&i<n&&j>=0&&j<n&&k>=0&&k<n&&!vis[i][j][k]&&map[i][j][k])
{
count[i][j][k]=count[p1][p2][p3]+1;
vis[i][j][k]=1;
if(i==x2&&j==y2&&k==z2)
{
printf("%d %d\n",n,count[i][j][k]);
flag=0;
break;
}
else
In(i,j,k);
}
}
}
if(flag)
printf("NO ROUTE\n");
}
return 0;
}