zoukankan      html  css  js  c++  java
  • ACM题解报告——HD1253

      今天AC了杭电OJ的1253题《胜利大逃亡》,题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1253

      该题目是一个比较经典立方体迷宫问题,要求在给定的时间内从始点(0,0,0)逃到出口(a-1,b-1,c-1),这里我采用的是BFS(宽度优先搜索)。

      代码如下:

    #include<iostream>
    using namespace std;
    int map[55][55][55],a,b,c,times,visit[55][55][55];
    int fx[6]={1,-1,0,0,0,0},fy[6]={0,0,1,-1,0,0},fz[6]={0,0,0,0,1,-1};
    typedef struct 
    {
      int x;
      int y;
      int z;
      int t;
    }Node;
    Node node[125005];
    int check(int p,int q,int x)
    {
      int flag=1;
    if(p<0||p>=a||q<0||q>=b||x<0||x>=c)
      flag=0;
     else if(visit[p][q][x]==1)
      flag=0;
    else if( map[p][q][x]==1)
      flag=0;
     return flag;
    }
    void bfs(int m,int n,int h)
    {
      int i,head,tail,p,q,x;
      head=0;
      tail=1;
      node[1].x=m;
      node[1].y=n;
      node[1].z=h;
      node[1].t=0;
    if(m==a-1&&n==b-1&&h==c-1)  
    {
      cout<<"0"<<endl;
      return ;
     }
      while( head!=tail)
    {
      head++;
      for(i=0;i<6;i++)
    {
      p=node[head].x+fx[i];
      q=node[head].y+fy[i];
      x=node[head].z+fz[i];
      if(check(p,q,x)==1)
    {
      tail++;
      node[tail].x=p;
      node[tail].y=q;
      node[ tail].z=x;
      node[tail].t=node[head].t+1;
      visit[node[ tail].x][node[tail].y][node[tail].z]=1;
      if(node[tail].x==a-1&&node[tail].y==b-1&&node[tail].z==c-1 )
    {
      if(node[tail].t>times)  
    {
      cout<<"-1"<<endl;
     }
      else
        cout<<node[ tail].t<<endl;
      return ;
     }
     }
     }
     }
    cout<<"-1"<<endl;
    }
    int main( )
    {
      int i,j,k,t;
      scanf( "%d",&t);
     while(t--)
    {
      scanf("%d%d%d%d",&a,&b,&c,&times);
      memset(visit,0,sizeof(visit));
      for(i=0;i<a;i++)
        for(j=0;j<b;j++)
          for( k=0;k<c;k++)
            scanf("%d",&map[i][j][k]);
      bfs(0,0,0);
    
    }
      return 0;
    }

    hdoj上要C++才能AC,大概900MS左右,G++的话会超时的。

      

  • 相关阅读:
    分享点干货(此this非彼this)this的详细解读
    程序员需要掌握的排序算法之希尔排序(最小增量排序)
    JAVA基础学习笔记
    简单的时间日期格式化(未封装成控件)
    面试造航母,工作拧螺丝
    浅谈jquery插件开发模式
    Relative与Absolute组合使用
    表单
    个人介绍
    用计数法解决数组排序问题
  • 原文地址:https://www.cnblogs.com/paradises/p/3101744.html
Copyright © 2011-2022 走看看