• 杭电1253 超时的bfs...


    #include<stdio.h>
    #include<iostream>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    int mapp[51][51][51];
    int dir[6][3]={{0,1,0},{0,-1,0},{0,0,1},{0,0,-1},{1,0,0},{-1,0,0}};
    int visit[51][51][51];
    int flag,time[125001],a,b,c,t,ret;
    bool cmp(int x,int y)
    {
     return x>y;
    }
    void dfs(int z,int x,int y,int cont)
    {
     int i,j,k,zz,xx,yy;
     if(z==a-1&&x==b-1&&y==c-1)
     {
      if(cont<=t)
      {
       flag=1;
       time[ret++]=cont;
       return;
      }
     }
     if(cont>=t) return;
     for(i=0;i<6;i++)
     {
      zz=z+dir[i][0];
      xx=x+dir[i][1];
      yy=y+dir[i][2];    
      if(visit[zz][xx][yy]==1||zz<0||zz>=a||xx<0||xx>=b||yy<0||yy>=c||mapp[zz][xx][yy]==1) continue;
      cont++;
      visit[zz][xx][yy]=1;
      dfs(zz,xx,yy,cont);
      visit[zz][xx][yy]=0;
     } 
    }
    int main()
    {
     int i,j,k,n;
     cin>>n;
     while(n--)
     {
         scanf("%d %d %d %d",&a,&b,&c,&t);
      if(a==b==c==1)
      {
       cout<<"-1"<<endl;
       continue;
      }
      if(a+b+c>t)
      {
       cout<<"-1"<<endl;
       continue;
      }
      for(i=0;i<a;i++)
      {
       for(j=0;j<b;j++)
       {
        for(k=0;k<c;k++)
        {
         scanf("%d",&mapp[i][j][k]);
        }
       }
      }
      flag=0;
      ret=0;
      memset(visit,0,sizeof(visit));
      memset(time,0,sizeof(time));
      visit[0][0][0]=1;
      dfs(0,0,0,0);
      sort(time,time+ret,cmp);
      if(flag==1) cout<<time[0]<<endl;
      else cout<<"-1"<<endl;
     }
     return 0;
    }

  • 相关阅读:
    Go学习2-切片
    Go学习1-MOD
    lua学习之逻辑运算符not,and,or
    google protobuf c++ 反射
    我要谴责一下,你们复制别人的答案好歹仔细看看
    远程登录redis
    openssl进行RSA加解密(C++)
    linux通过进程名查看其占用端口
    简体字丶冯|服务网关kong-docker安装
    简体字冯|docker-安装docker私有库
  • 原文地址:https://www.cnblogs.com/z1141000271/p/5391479.html
Copyright © 2020-2023  润新知