• hdu-1253(bfs+剪枝)


    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1253

    思路:简单的bfs,就是要注意剪枝。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<queue>
    #include<cmath>
    using namespace std;
    int a[55][55][55],x,y,z,t,ans,vis[55][55][55];
    int zz[10][10]={{0,1,0},{0,-1,0},{1,0,0},{-1,0,0},{0,0,1},{0,0,-1}};
    struct Node{
        int x,y,z,num;
    };
    bool bfs()
    {
        int i,j,k;
        queue <Node> q;
        memset(vis,0,sizeof(vis));
        Node tmp,tp;
        tmp.x=1;tmp.y=1;tmp.num=0;tmp.z=1;
        vis[1][1][1]=1;
        q.push(tmp);
        while(!q.empty())
        {
            tmp=q.front();
            q.pop();
            if(tmp.x==x&&tmp.y==y&&tmp.z==z&&tmp.num<=t) 
            {
                ans=tmp.num;return true;
            }
            if(tmp.num>t) return false;
            for(int i=0;i<6;i++)
            {
                tp.x=tmp.x+zz[i][0];
                tp.y=tmp.y+zz[i][1];
                tp.z=tmp.z+zz[i][2];
                tp.num=tmp.num+1;
                if(tp.num>t) continue;
                if(tp.x<1||tp.x>x||tp.y<1||tp.y>y||tp.z<1||tp.z>z) continue;
                if(a[tp.x][tp.y][tp.z]==1||vis[tp.x][tp.y][tp.z]==1) continue;
                vis[tp.x][tp.y][tp.z]=1;
                if(abs(tp.x-x+1)+abs(tp.y-y+1)+abs(tp.z-z+1)+tp.num>t) continue; //剪枝,判断剩余时间能否到达终点 
                q.push(tp);
            }
        }
        return false;
    }
    int main(void)
    {
        int T,i,j,k;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d%d%d%d",&x,&y,&z,&t);
            for(i=1;i<=x;i++)
               for(j=1;j<=y;j++)
                  for(k=1;k<=z;k++)
                  scanf("%d",&a[i][j][k]);
            if(bfs()==true) printf("%d
    ",ans);
            else printf("-1
    ");
        }
    }
    View Code
  • 相关阅读:
    六、Doris数据流与控制流
    五、Doris数据分布
    非洛达芯片检测聚合教程NOT AIROHA CHIP
    慧联A8最新检测使用教程V2.0.3
    SpringBoot集成thymeleaf增删改查示例
    记一次Linux磁盘满盘/dev/vda1目录清理记录
    悦虎固件升级到底有啥用?二代为例
    PerfDog性能狗简介
    macOS常用命令
    像素格式与纹理压缩
  • 原文地址:https://www.cnblogs.com/2018zxy/p/9817713.html
Copyright © 2020-2023  润新知