zoukankan      html  css  js  c++  java
  • hdu 1253 ( 胜利大逃亡 )

    http://acm.hdu.edu.cn/problemclass.php?id=268
    View Code
    Problem : 1253 ( 胜利大逃亡 ) Judge Status : Accepted

    自我感觉BFS难度1可以告一段落了。
    思路:
    这题和一般的BFS的做法是一样的m[k][i][j]
    =1表示第k块第i行第j列是墙,

    #include
    <iostream>
    #include
    <stdio.h>
    #include
    <queue>
    #include
    <algorithm>
    using namespace std;
    int m[51][51][51],vis[51][51][51];
    int a,b,c,t,ans;
    int dir[6][3]={{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}};
    struct node
    {
    int x,y,z,dis;
    node(
    int _x=0,int _y=0,int _z=0,int _dis=0):x(_x),y(_y),z(_z),dis(_dis){};
    };

    void BFS()
    {
    queue
    <node> q;
    q.push(node(
    0,0,0,0));
    vis[
    0][0][0]=1;
    ans
    =-1;
    while(!q.empty())
    {
    node tt
    =q.front();
    q.pop();
    for(int k=0;k<6;k++)
    {
    int x=tt.x+dir[k][0];
    int y=tt.y+dir[k][1];
    int z=tt.z+dir[k][2];
    if(x>=0&&x<a&&y>=0&&y<b&&z>=0&&z<c&&!vis[x][y][z]&&m[x][y][z]==0)
    {
    vis[x][y][z]
    =1;
    q.push(node(x,y,z,tt.dis
    +1));
    if(x==a-1&&y==b-1&&z==c-1)
    {
    if(tt.dis+1<=t)ans=tt.dis+1;
    return;
    }
    }

    }
    }
    }
    int main()
    {
    int cas;
    scanf(
    "%d",&cas);
    while(cas--)
    {
    memset(vis,
    0,sizeof(vis));
    memset(m,
    0,sizeof(m));
    scanf(
    "%d%d%d%d",&a,&b,&c,&t);
    for(int k=0;k<a;k++)
    for(int i=0;i<b;i++)
    for(int j=0;j<c;j++)
    scanf(
    "%d",&m[k][i][j]);
    BFS();
    printf(
    "%d\n",ans);
    }
    }
  • 相关阅读:
    DbgPrint格式 输出
    string 类常用函数[转]
    pragma warning[转]
    连接符
    ubuntu ftp server
    关于dex

    Topology中各函数调用顺序
    C# 错误捕捉
    操作word,Excel,PPT
  • 原文地址:https://www.cnblogs.com/sook/p/1993080.html
Copyright © 2011-2022 走看看