poj 2251 Dungeon Master(广搜)

系统 1803 0

题意:三维空间,可以走上下左右前后六个方向,求最短路径,BFS

  

      #include<stdio.h>
      
        

#include
      
      <queue>
      
        

#include
      
      <
      
        string
      
      .h>


      
        using
      
      
        namespace
      
      
         std;


      
      
        const
      
      
        int
      
       MAXN=
      
        50
      
      
        ;




      
      
        char
      
      
         str[MAXN][MAXN][MAXN];


      
      
        int
      
      
         step[MAXN][MAXN][MAXN];


      
      
        int
      
      
         vis[MAXN][MAXN][MAXN];


      
      
        int
      
      
         l,r,c;


      
      
        struct
      
      
         Node

{

    
      
      
        int
      
      
         x,y,z;

}s,e;




      
      
        int
      
      
         BFS()

{

    
      
      
        int
      
      
         i,j;

    Node head,next;

    queue
      
      <Node>
      
        Q;

    Q.push(s);

    step[s.x][s.y][s.z]
      
      =
      
        0
      
      
        ;

    
      
      
        while
      
      (!
      
        Q.empty())

    {

        head
      
      =
      
        Q.front();

        Q.pop();

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

        {

            next
      
      =
      
        head;

            
      
      
        if
      
      (i==
      
        0
      
      ) next.x-=
      
        1
      
      
        ;

            
      
      
        if
      
      (i==
      
        1
      
      ) next.x+=
      
        1
      
      
        ;

            
      
      
        if
      
      (i==
      
        2
      
      ) next.y-=
      
        1
      
      
        ;

            
      
      
        if
      
      (i==
      
        3
      
      ) next.y+=
      
        1
      
      
        ;

            
      
      
        if
      
      (i==
      
        4
      
      ) next.z-=
      
        1
      
      
        ;

            
      
      
        if
      
      (i==
      
        5
      
      ) next.z+=
      
        1
      
      
        ;

            
      
      
        if
      
      (!vis[next.x][next.y][next.z] && str[next.x][next.y][next.z]==
      
        1
      
      
        )

            {

                vis[next.x][next.y][next.z]
      
      =
      
        1
      
      
        ;

                Q.push(next);

                step[next.x][next.y][next.z]
      
      =step[head.x][head.y][head.z]+
      
        1
      
      
        ;

                
      
      
        if
      
      (next.x==e.x && next.y==e.y && next.z==e.z) 
      
        return
      
        step[head.x][head.y][head.z]+
      
        1
      
      
        ;

            }

        }

    }

    
      
      
        return
      
      
        0
      
      
        ;

}


      
      
        int
      
      
         main()

{

    
      
      
        int
      
      
         i,j,k;

    
      
      
        while
      
      (scanf(
      
        "
      
      
        %d%d%d
      
      
        "
      
      ,&l,&r,&c)!=
      
        EOF)

    {

        
      
      
        if
      
      (l==
      
        0
      
       && r==
      
        0
      
       && c==
      
        0
      
      ) 
      
        break
      
      
        ;

        memset(vis,
      
      
        0
      
      ,
      
        sizeof
      
      
        (vis));

        memset(str,
      
      
        0
      
      ,
      
        sizeof
      
      
        (str));

        
      
      
        for
      
      (i=
      
        1
      
      ; i<=l; i++
      
        )

        {

            
      
      
        for
      
      (j=
      
        1
      
      ; j<=r; j++
      
        )

            {

                scanf(
      
      
        "
      
      
        %s
      
      
        "
      
      ,str[i][j]+
      
        1
      
      
        );

                
      
      
        for
      
      (k=
      
        1
      
      ; str[i][j][k]; k++
      
        )

                {

                    
      
      
        if
      
      (str[i][j][k]==
      
        '
      
      
        #
      
      
        '
      
      ) str[i][j][k]=
      
        0
      
      
        ;

                    
      
      
        if
      
      (str[i][j][k]==
      
        '
      
      
        .
      
      
        '
      
      ) str[i][j][k]=
      
        1
      
      
        ;

                    
      
      
        if
      
      (str[i][j][k]==
      
        '
      
      
        S
      
      
        '
      
      
        )

                    {

                        str[i][j][k]
      
      =
      
        1
      
      
        ;

                        s.x
      
      =
      
        i;

                        s.y
      
      =
      
        j;

                        s.z
      
      =
      
        k;

                    }

                    
      
      
        if
      
      (str[i][j][k]==
      
        '
      
      
        E
      
      
        '
      
      
        )

                    {

                        str[i][j][k]
      
      =
      
        1
      
      
        ;

                        e.x
      
      =
      
        i;

                        e.y
      
      =
      
        j;

                        e.z
      
      =
      
        k;

                    }

                }

            }

        }

        
      
      
        int
      
       ans=
      
        BFS();

        
      
      
        if
      
      (ans) printf(
      
        "
      
      
        Escaped in %d minute(s).\n
      
      
        "
      
      
        ,ans);

        
      
      
        else
      
       printf(
      
        "
      
      
        Trapped!\n
      
      
        "
      
      
        );



    }

    
      
      
        return
      
      
        0
      
      
        ;

}
      
    

 

poj 2251 Dungeon Master(广搜)


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论