您的位置:首页 > 其它

hdu1240-----------------简单BFS

2012-03-13 21:16 288 查看
写完这个题,不得不思考,什么时候学STL。一道简简单单的题被我写成这个样子,真伤心啊!126行代码,别人60行就搞定了。#¥#%*@&........累啊!虽然也是0ms过的!唉,但是写的时候好费力啊!可以说花了整整一个晚上。说实话,题很简单,就是比一般的BFS多加两个方向而已。输入时一个超低级的错误浪费我好久时间。下次注意,细心。不说了,模板题!

AC:

#include<stdio.h>
#include<string.h>
char map[12][12][12]; //记录星际地图
int step[12][12][12]; //记录第走到第 step[i][j][k]个点时,走了几步

int n;
int result;
int jieguo;
int bx,by,bz;
int sx,sy,sz;
int xfan[6]={1,-1,0,0,0,0};
int yfan[6]={0,0,1,-1,0,0};
int zfan[6]={0,0,0,0,1,-1};

struct queue
{
int x[100000];
int y[100000];
int z[100000];
int front;
int back; //靠,刚刚加了那些乱七八糟数据结构,把我弄混了
}qu;
void initqueue(queue &qu)
{
qu.front=0;
qu.back=-1;
}
void push(queue &qu,int x,int y,int z)
{
qu.back++;
qu.x[qu.back]=x;
qu.y[qu.back]=y;
qu.z[qu.back]=z;
}
void pop(queue &qu)
{
qu.front++;
}
int getx(queue &qu)
{
int x;
x=qu.x[qu.front];
return x;
}
int gety(queue &qu)
{
int y;
y=qu.y[qu.front];
return y;
}
int getz(queue &qu)
{
int z;
z=qu.z[qu.front];
return z;
}

int dfs()
{
int i,x,y,z;
int xx,yy,zz;
initqueue(qu);
push(qu,bx,by,bz);
map[bx][by][bz]='X';
map[sx][sy][sz]='O';
step[bx][by][bz]=0;

while(qu.front<=qu.back)
{
x=getx(qu);
y=gety(qu);
z=getz(qu);
pop(qu);
if(x==sx&&y==sy&&z==sz)
{
result=1;
jieguo=step[x][y][z];
break;
}
for(i=0;i<6;i++)
{
xx=x+xfan[i];
yy=y+yfan[i];
zz=z+zfan[i];
if(xx>=0&&xx<n&&yy>=0&&yy<n&&zz>=0&&zz<n&&map[xx][yy][zz]!='X')
{
step[xx][yy][zz]=step[x][y][z]+1;
map[xx][yy][zz]='X';
push(qu,xx,yy,zz);
}
}
}
return result;
}

int main()
{
char a[100],b[100];
int i,j,k;
while(scanf("%s %d",a,&n)!=EOF)
{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{

scanf("%s",map[i][j]);
}
}
scanf("%d%d%d%d%d%d",&bx,&by,&bz,&sx,&sy,&sz);
scanf("%s",b);
result=0;
k=dfs();
if(k>0)
printf("%d %d\n",n,jieguo);
else
printf("NO ROUTE\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: