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

写完这个题,不得不思考,什么时候学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;
}

posted on 2012-03-13 21:16  hrbust_09zhangyabin  阅读(368)  评论(0编辑  收藏  举报