hdu 1253

#include<cstdio>
#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
int s[55][55][55];
int used[55][55][55];
int bzx[55]={1,-1,0,0,0,0};
int bzy[55]={0,0,1,-1,0,0};
int bzz[55]={0,0,0,0,1,-1};
int a,b,c,t,flag=0;
struct node
{    int x,y,z,step;};
int bfs(int k1,int k2,int k3)
{    int i;
    queue<node>q;
    node s1,s2;
    s1.x=k1;   s1.y=k2;   s1.z=k3;  s1.step=0;
    q.push(s1);
    used[k1][k2][k3]=1;
    while(!q.empty())
    {    s1=q.front();
        if(s1.x==a-1&&s1.y==b-1&&s1.z==c-1&&s1.step<=t)
            return s1.step;
        for(i=0;i<6;i++)
        {    s2.x=s1.x+bzx[i];  s2.y=s1.y+bzy[i];  s2.z=s1.z+bzz[i];
            if(s2.x<a&&s2.x>=0&&s2.y<b&&s2.y>=0&&s2.z<c&&s2.z>=0&&0==used[s2.x][s2.y][s2.z]&&0==s[s2.x][s2.y][s2.z])
            {    s2.step=s1.step+1;
                used[s2.x][s2.y][s2.z]=1;
                q.push(s2);
            }
        }
        q.pop();
    }
    return -1;
}
int main()
{
    int m,i,j,k;
    cin>>m;
    while(m--)
    {    cin>>a>>b>>c>>t;
        for(i=0;i<a;i++)
            for(j=0;j<b;j++)
                for(k=0;k<c;k++)
                    scanf("%d",&s[i][j][k]);
        memset(used,0,sizeof(used));
        printf("%d\n",bfs(0,0,0));
    }
    return 0;
}

#include<cstdio>

#include<iostream>

#include<queue>

#include<cstring>

using namespace std;

int s[55][55][55];

int used[55][55][55];

int bzx[55]={1,-1,0,0,0,0};

int bzy[55]={0,0,1,-1,0,0};

int bzz[55]={0,0,0,0,1,-1};

int a,b,c,t,flag=0;

struct node

{ int x,y,z,step;};

int bfs(int k1,int k2,int k3)

{ int i;

queue<node>q;

node s1,s2;

s1.x=k1;   s1.y=k2;   s1.z=k3;  s1.step=0;

q.push(s1);

used[k1][k2][k3]=1;

while(!q.empty())

{ s1=q.front();

if(s1.x==a-1&&s1.y==b-1&&s1.z==c-1&&s1.step<=t)

return s1.step;

for(i=0;i<6;i++)

{ s2.x=s1.x+bzx[i];  s2.y=s1.y+bzy[i];  s2.z=s1.z+bzz[i];

if(s2.x<a&&s2.x>=0&&s2.y<b&&s2.y>=0&&s2.z<c&&s2.z>=0&&0==used[s2.x][s2.y][s2.z]&&0==s[s2.x][s2.y][s2.z])

{ s2.step=s1.step+1;

used[s2.x][s2.y][s2.z]=1;

q.push(s2);

}

}

q.pop();

}

return -1;

}

int main()

{

int m,i,j,k;

cin>>m;

while(m--)

{ cin>>a>>b>>c>>t;

for(i=0;i<a;i++)

for(j=0;j<b;j++)

for(k=0;k<c;k++)

scanf("%d",&s[i][j][k]);

memset(used,0,sizeof(used));

printf("%d\n",bfs(0,0,0));

}

return 0;

}

hdu 1253,布布扣,bubuko.com

时间: 2024-08-09 00:35:51

hdu 1253的相关文章

HDU 1253 (简单三维广搜) 胜利大逃亡

奇葩!这么简单的广搜居然爆内存了,而且一直爆,一直爆,Orz 而且我也优化过了的啊,尼玛还是一直爆! 先把代码贴上睡觉去了,明天再来弄 1 //#define LOCAL 2 #include <iostream> 3 #include <cstdio> 4 #include <cstring> 5 #include <queue> 6 #include <cmath> 7 using namespace std; 8 9 struct Poin

HDU 1253 胜利大逃亡(BFS)

#include <iostream> #include <cstdlib> #include <cstdio> #include <queue> #include <cstring> using namespace std; struct node{ int x,y,z,step; }; int ma[51][51][51]; int A,B,C,T; int mv[6][3] = {{1,0,0},{0,1,0},{0,0,1},{-1,0,

HDU 1253 胜利大逃亡 NYOJ 523【BFS】

胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 24608    Accepted Submission(s): 9427 Problem Description Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会. 魔王住在一个城堡里,城堡是一个A*B*C的立方体,可以被表示成A个B*C的

[ACM] hdu 1253 胜利大逃亡 (三维BFS)

胜利大逃亡 Problem Description Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会. 魔王住在一个城堡里,城堡是一个A*B*C的立方体,可以被表示成A个B*C的矩阵,刚开始Ignatius被关在(0,0,0)的位置,离开城堡的门在(A-1,B-1,C-1)的位置,现在知道魔王将在T分钟后回到城堡,Ignatius每分钟能从一个坐标走到相邻的六个坐标中的其中一个.现在给你城堡的地图,请你计算出Ignatius能否在魔王回来前离开城堡(只要走到出

HDU 1253:胜利大逃亡(简单三维BFS)

胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 24937    Accepted Submission(s): 9535 Problem Description Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会. 魔王住在一个城堡里,城堡是一个A*B*C的立方体,可以被表示成A个B*C的

hdu 1253 胜利大逃亡(简单题)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1253 题目大意:在所给的时间能顺利离开城堡. 1 #include <iostream> 2 #include <cstdio> 3 #include <queue> 4 #include <cstring> 5 using namespace std; 6 int map[55][55][55],visit[55][55][55],a,b,c,T; 7 int

hdu - 1240 Nightmare &amp;&amp; hdu - 1253 胜利大逃亡(bfs)

http://acm.hdu.edu.cn/showproblem.php?pid=1240 开始没仔细看题,看懂了发现就是一个裸的bfs,注意坐标是三维的,然后每次可以扩展出6个方向. 第一维代表在第几层.后两维代表行和列. 1 #include <cstdio> 2 #include <cstring> 3 #include <queue> 4 using namespace std; 5 struct point 6 { 7 int x,y,z,step; 8 b

HDU 1253 胜利大逃亡

胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 30841    Accepted Submission(s): 11509 Problem Description Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会. 魔 王住在一个城堡里,城堡是一个A*B*C的立方体,可以被表示成A个B*C

hdu 1253 3维迷宫 在规定时间内能否出迷宫 (3维BFS)

题意:有一个人要在魔王回来之前逃出城堡.1表示墙,0表示路.魔王将在T分钟后回到城堡 起点可以是墙,但是人能走出.而终点也可以是墙,那自然就走不出了,但是要判断. 剪枝:如果终点是门或者从起点到终点的最短时间都大于t ,直接输出 -1. Sample Input13 3 4 20 //a b c T0 1 1 10 0 1 10 1 1 11 1 1 11 0 0 10 1 1 10 0 0 00 1 1 00 1 1 0 Sample Output11 1 # include <cstdio>