HDU 1240

http://acm.hdu.edu.cn/showproblem.php?pid=1240

三维的BFS  但是一开始理解错题意了 哎。。。  怎么犯这种错误捏

代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
using namespace std;

char a[12][12][12];
int visit[12][12][12];//行列
int bx,by,bz,ex,ey,ez,step,N;
int XX[6]={1,-1,0,0,0,0},YY[6]={0,0,1,-1,0,0},
ZZ[6]={0,0,0,0,1,-1};
bool flag;

struct Node{int x, y,z,step;}qu[1005];
int beg,end;

int BFS(int bx,int by,int bz)
{
if(bx==ex&&by==ey&&bz==ez) {flag=true;return 0;}
int xx,yy,zz,i,j,k;
beg=0;
end=1;
qu[1].x=bx; qu[1].y=by; qu[1].z=bz; qu[1].step=0;
while(beg<end)//如果是beg<=end是错误的 !!!但是这道题oj系统测不出来 在HDU上beg<=end是正确的
{
beg=beg+1;
for(i=0;i<6;i++)
{
xx=qu[beg].x+XX[i];
yy=qu[beg].y+YY[i];
zz=qu[beg].z+ZZ[i];

if(xx<0||xx>=N||yy<0||yy>=N||zz<0||zz>=N)
continue;
if(visit[xx][yy][zz]||a[xx][yy][zz]=='X')
continue;
if(!visit[xx][yy][zz])
{
visit[xx][yy][zz]=1;
end++;

qu[end].x=xx;
qu[end].y=yy;
qu[end].z=zz;
qu[end].step=qu[beg].step+1;

if(xx==ex&&yy==ey&&zz==ez)
{
flag=true;
return qu[end].step;
}
}
}

}
}

int main()
{
int i,j,k;
string s; /*char s[19]; 开始这个地方CE
头文件是 #include<cstring>时 string s;错误,
改为char s[10],正确 受ZGJ诗歌的指点:
将头文件改为#include<string> string s;是正确的
->#include<string>和#include<cstring>是不一样的
*/
while(cin>>s>>N)
{
for(k=0;k<N;k++)
for(i=0;i<N;i++)
for(j=0;j<N;j++)
cin>>a[i][j][k];

cin>>i>>j>>k;
bx=j,by=i,bz=k;

cin>>i>>j>>k;
ex=j,ey=i,ez=k;
cin>>s;

flag=false;
memset(a,0,sizeof(a));
visit[bx][by][bz]=1;
int h=BFS(bx,by,bz);


if(flag)
{
// cout<<N<<""<<h<<endl;

printf("%d %d\n",N,h);
}

else printf("NO ROUTE\n");


}
return 0;

}







posted @ 2011-11-22 21:37  快乐.  阅读(212)  评论(0编辑  收藏  举报