NOJ 523题/杭电1253题 亡命逃窜

举报
Linux猿 发表于 2021/08/06 01:03:33 2021/08/06
【摘要】 题目链接~~> 开始在杭电上做这题时先是超内存,然后是超时,剪枝了一下结果wrong了,最后参考了一下才AC; 代码: #include<stdio.h>#include<queue>using namespace std;int a[50][50][50],n,m,u,D;int dx[7]={1,-1,0,0,0,0},dy[7]={0...

题目链接~~>

开始在杭电上做这题时先是超内存,然后是超时,剪枝了一下结果wrong了,最后参考了一下才AC;

代码:


      #include<stdio.h>
      #include<queue>
      using namespace std;
      int a[50][50][50],n,m,u,D;
      int dx[7]={1,-1,0,0,0,0},dy[7]={0,0,1,-1,0,0},dz[7]={0,0,0,0,1,-1};
      struct zhang
      {
      int x,y,z,time;
      };
      int bfs(int x,int y,int z)
      {
      queue<zhang>q;
       zhang current,next;
       current.x=x;
       current.y=y;
       current.z=z;
       current.time=0;
       q.push(current);
      while(!q.empty())
       {
       current=q.front();
       q.pop();
      for(int i=0;i<6;i++)
       {
       next.x=current.x+dx[i];
       next.y=current.y+dy[i];
       next.z=current.z+dz[i];
      if(current.time+1<=D&&next.x>=0&&next.y>=0&&next.z>=0&&next.x<n&&next.y<m&&next.z<u&&!a[next.x][next.y][next.z])
       {
      if(next.x==n-1&&next.y==m-1&&next.z==u-1)
       {
      return current.time+1;
       }
       next.time=current.time+1;
       a[next.x][next.y][next.z]=1;
       q.push(next);
       }
       }
       }
      return -1;
      }
      int main()
      {
      int T,i,j,k;
      scanf("%d",&T);
      while(T--)
       {
      scanf("%d%d%d%d",&n,&m,&u,&D);
      for(i=0;i<n;i++)
      for(j=0;j<m;j++)
      for(k=0;k<u;k++)
      scanf("%d",&a[i][j][k]);
      printf("%d\n",bfs(0,0,0));
       }
      return 0;
      }
  
 


 

文章来源: blog.csdn.net,作者:Linux猿,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/nyist_zxp/article/details/9316933

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。