HDU 1253 胜利大逃亡

#include<string.h>
#include<stdio.h>

int a,b,c,pos[52][52][52];

struct POS
{
    int x,y,z;
} q[125110];

int bfs()
{
    int s,e,i;
    struct POS temp,t;
    int jx[] = {0,0,0,0,1,-1};
    int jy[] = {0,0,-1,1,0,0};
    int jz[] = {-1,1,0,0,0,0};
    s = e = 0;
    q[e].x = q[e].y = q[e].z = 0;
    e++;
    while(s < e)
    {
        temp = q[s];
        s++;
        if(temp.x == a-1 && temp.y == b-1 && temp.z == c-1) return (1);
        for(i = 0; i < 6; i++)
        {
            t.x = temp.x + jx[i];
            t.y = temp.y + jy[i];
            t.z = temp.z + jz[i];
            if(t.x >= 0 && t.x < a && t.y >= 0 && t.y < b && t.z >= 0 && t.z < c && pos[t.x][t.y][t.z] == 0 )
            {
                q[e] = t;
                e++;
                pos[t.x][t.y][t.z] = pos[temp.x][temp.y][temp.z] + 1;
            }
        }
    }
    return 0;
}

int main()
{
    memset(pos,-1,sizeof(pos));
    int i,j,k,js,t;
    scanf("%d",&js);
    while(js--)
    {
        scanf("%d %d %d %d",&a,&b,&c,&t);
        for(i = 0; i < a; i++)
            for(j = 0; j < b; j++)
                for(k = 0; k < c; k++)
                {
                    scanf("%d",&pos[i][j][k]);
                    if(pos[i][j][k] == 1) pos[i][j][k] = -1;
                }
        pos[0][0][0] = 0;//起点是 1 也能走
        if(!bfs()) printf("-1\n");
        else if(pos[a-1][b-1][c-1] <= t) printf("%d\n",pos[a-1][b-1][c-1]);
        else printf("-1\n");
    }
    return 0;
}
原文地址:https://www.cnblogs.com/zmx354/p/2932586.html