HDU 1253 胜利大逃亡(三维数组+bfs)

来源:互联网 发布:英国做律师 知乎 编辑:程序博客网 时间:2024/05/16 10:23




http://acm.hdu.edu.cn/showproblem.PHP?pid=1253





题意就不多说了  迷宫类问题   用bfs 即可  



AC代码:

#include <stdio.h>  #include <queue>  #include <string.h>  using namespace std;     int A,B,C,T;  int map[55][55][55];  int vis[55][55][55];  int dirx[]={0,0,0,0,1,-1};  int diry[]={0,0,1,-1,0,0};  int dirz[]={1,-1,0,0,0,0};  int flag;    struct node{      int x;      int y;      int z;      int step;   };       int judge(int x,int y,int z){      if (x>=0&&x<A&&y>=0&&y<B&&z>=0&&z<C&&vis[x][y][z]==0&&map[x][y][z]==0)          return 1;      return 0;  }     void bfs(){      queue<node>Q;      node a;        a.x=0;      a.y=0;      a.z=0;      a.step=0;      vis[0][0][0]=1;      Q.push(a);                  flag=1;       while (!Q.empty()){          a=Q.front();          Q.pop();                if (a.step>T)//刚开始没加这个判断 超时了 好多次  加了以后 1950ms 险过             {              break;          }          if (a.x==A-1&&a.y==B-1&&a.z==C-1&&a.step<=T){              printf ("%d\n",a.step);              flag=0;              break;                        }                                                        for (int i=0;i<6;i++){              node b;              b=a;              b.x+=dirx[i];              b.y+=diry[i];              b.z+=dirz[i];              if (judge(b.x,b.y,b.z)){                  b.step++;                  vis[b.x][b.y][b.z]=1;                  Q.push(b);              }                                      }                           }            if (flag){          printf ("-1\n");      }  }    int main (){      int n;            scanf ("%d",&n);      while (n--){          scanf ("%d%d%d%d",&A,&B,&C,&T);          for (int i=0;i<A;i++){              for (int j=0;j<B;j++){                  for (int k=0;k<C;k++){                      scanf ("%d",&map[i][j][k]);                  }              }          }                     memset(vis,0,sizeof(vis));                    bfs();                }      return 0;  }   


0 0
原创粉丝点击