HDU1253

Posted lin1874

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU1253相关的知识,希望对你有一定的参考价值。

三维迷宫

bfs+剪枝

技术图片
#include <bits/stdc++.h>
using namespace std;
const int MAXN=55;
int g[MAXN][MAXN][MAXN];
int a,b,c,n;
int dx[6]={0,0,1,-1,0,0};
int dy[6]={1,-1,0,0,0,0};
int dz[6]={0,0,0,0,1,-1};
struct node{
    int x,y,z,c;
};
queue<node>que;
bool vis[MAXN][MAXN][MAXN];
int bfs(){
    node aa;
    aa.x=0,aa.y=0;aa.z=0;aa.c=0;
    while(!que.empty())que.pop();
    que.push(aa);
    while(!que.empty()){
        aa=que.front();que.pop();
        if((aa.x==a-1)&&(aa.y==b-1)&&(aa.z==c-1)){
            if(aa.c>=n)return -1;
            else return aa.c;
        }
        if(vis[aa.x][aa.y][aa.z])continue;
        vis[aa.x][aa.y][aa.z]=true;
        for(int i=0;i<6;i++){
            int nx=dx[i]+aa.x;
            int ny=dy[i]+aa.y;
            int nz=dz[i]+aa.z;
            if(nx<0||ny<0||nz<0||nx>=a||ny>=b||nz>=c)continue;
            if(g[nx][ny][nz]==1)continue;
            node tt;
            tt.x=nx;tt.y=ny;tt.z=nz;tt.c=aa.c+1;
            if(abs(a-1-nx)+abs(b-1-ny)+abs(c-1-nz)>(n-tt.c))continue;//剪枝
            que.push(tt);
        }
    }
    return -1;

}
int main(){
    int T;
    scanf("%d",&T);
    while(T--){
        scanf("%d%d%d%d",&a,&b,&c,&n);
        for(int i=0;i<a;i++){
            for(int j=0;j<b;j++){
                for(int k=0;k<c;k++){
                    scanf("%d",&g[i][j][k]);
                    vis[i][j][k]=false;
                }
            }
        }
        printf("%d
",bfs());

    }

    return 0;
}
View Code

以上是关于HDU1253的主要内容,如果未能解决你的问题,请参考以下文章

HDU1253-胜利大逃亡 (三维BFS)

HDU1253

Hdu 1253 胜利大逃亡

HDU 1253 胜利大逃亡

[HDU 1253] 胜利大逃亡

HDU 1253 胜利大逃亡 题解