一题简直模板的
BFS,只是三维遍历而已。

#include <stdio.h>

#include <iostream>

#include <sstream>

#include <string.h>

#include <math.h>

#include<stdlib.h>

#include <queue>

#include <set>

#include <algorithm>

using namespace std;

int A,B,C,t;

int dxy[7][3]=

{

    0,-1,0,

    0,1,0,

    1,0,0,

    -1,0,0,

    0,0,1,

    0,0,-1

};

int a[55][55][55];

int flag[55][55][55];

struct asd

{

    int x,y,z;

    int step;

} now,ne;

queue<asd>q;

void bfs()

{

    int i;

    memset(flag,0,sizeof(flag));

    while(!q.empty())

        q.pop();

    now.x=0;

    now.y=0;

    now.z=0;

    now.step=0;

    flag[0][0][0]=1;

    q.push(now);

    while(!q.empty())

    {

        now=q.front();

        q.pop();

        if(now.step+1>t)

            break;

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

        {

            int dx=now.x+dxy[i][0];

            int dy=now.y+dxy[i][1];

            int dz=now.z+dxy[i][2];

            if(dx==A-1&&dy==B-1&&dz==C-1&&now.step+1<=t)

            {

                printf("%d\n",now.step+1);

                return;

            }

            if(dx<0||dy<0||dz<0||dz>=C||dy>=B||dx>=A||flag[dx][dy][dz]||a[dx][dy][dz])

                continue;

            flag[dx][dy][dz]=1;

            ne.x=dx;

            ne.y=dy;

            ne.z=dz;

            ne.step=now.step+1;

            q.push(ne);

        }

    }

    printf("-1\n");

}

int main()

{

    int i,j,k,T;

    scanf("%d",&T);

    while(T--)

    {

        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",&a[i][j][k]);

            }

        }

        bfs();

    }

    return 0;

}

hdoj1253的更多相关文章

  1. HDOJ1253 胜利大逃亡 BFS

    胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...

随机推荐

  1. python 修饰符(转载)

    首先一个修饰符的实例: #!/usr/bin/env python def run(fn): def do_hello(): print "begin..." fn() print ...

  2. 文件共享和使用 dup 函数创建新描述符的区别

    前言 文件共享是指同时打开一个文件 用 dup 函数能对指定文件描述符再创建一个新的描述符,且这个新的描述符和旧的描述符指向的是同一个文件. 这两种行为有什么区别呢?下面给出的两张文件系统的图形象的解 ...

  3. 【BZOJ1975】[Sdoi2010]魔法猪学院 A*

    [BZOJ1975][Sdoi2010]魔法猪学院 Description iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪 ...

  4. java中Integer在JDK1.6和JDK1.7中的区别

    运行下面这段代码: System.out.println(Integer.valueOf("127")==Integer.valueOf("127")); Sy ...

  5. 单指令多数据流Single Instruction Multiple Data

    Single Instruction Multiple Data,单指令多数据流)能够复制多个操作数,并把它们打包在大型寄存器的一组指令集,例:3DNow!.SSE. SIMD在性能上的优势: 以加法 ...

  6. indexDB操作(部分方法不太会使用)

    <script type="text/javascript"> //打开数据库 function openDB(name,version){ var version = ...

  7. js实现菜单二级联动

    代码如下,以便自己以后方便查阅: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> < ...

  8. Linux下直接读写物理地址内存

    虚拟 转 物理地址  virt_to_phys( *addr );物理 转 虚拟地址  phys_to_virt( *addr ); 如: unsigned long pProtectVA; phys ...

  9. CSS3学习笔记(2)—左右跳动的红心

    还在为无法表达内心澎湃的心情而着急吗?还在为制作跳动的心而烦恼吗?哈哈,今天我就把代码全部奉上,为你们追妹子添点贡献,下面来看最终的动态效果(事先说明一下:我用的截屏gif制作软件是绿色版的,所以gi ...

  10. 如何刷新本地的DNS缓存?

    为了提高网站的访问速度,系统会在成功访问某网站后将该网站的域名.IP地址信息缓存到本地.下次访问该域名时直接通过IP进行访问.一些网站的域名没有变化,但IP地址发生变化,有可能因本地的DNS缓存没有刷 ...