• ZOJ 1940 Dungeon Master【三维BFS】


    <题目链接>

    题目大意:

    在一个立体迷宫中,问你从起点走到终点的最少步数。

    解题分析:

    与普通的BFS基本类似,只需要给数组多加一维,并且走的时候多加 上、下这两个方向就行。

    #include <cstdio>
    #include <cstring>
    #include <queue>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    int a,b,c;
    char mpa[35][35][35];
    int vis[35][35][35];
    int dir[][3]={{1,0,0},{-1,0,0},{0,1,0},{0,0,1},{0,-1,0},{0,0,-1}};
    
    
    struct node{
        int x,y,z;
        int step;
        node(int a=0,int b=0,int c=0,int d=0){
            x=a,y=b,z=c,step=d;
        }
    }st,et;
    
    void bfs(){
        memset(vis,0,sizeof(vis));
        queue<node>q;
        q.push(st);
        vis[st.x][st.y][st.z]=1;
        while(!q.empty()){
            node now=q.front();
            q.pop();
            if(now.x==et.x&&now.y==et.y&&now.z==et.z){
                printf("Escaped in %d minute(s).
    ",now.step);
                return;
            }
            for(int i=0;i<6;i++){
                int xx=now.x+dir[i][0];
                int yy=now.y+dir[i][1];
                int zz=now.z+dir[i][2];
                if(xx<1||xx>a||yy<1||yy>b||zz<1||zz>c||vis[xx][yy][zz]||mpa[xx][yy][zz]=='#')continue;
                vis[xx][yy][zz]=1;
                q.push(node(xx,yy,zz,now.step+1));
            }
        }
        printf("Trapped!
    ");
    }
    
    int main(){
        while(scanf("%d %d %d",&a,&b,&c)!=EOF,a||b||c){
            
            for(int i=1;i<=a;i++){
                getchar();
                for(int j=1;j<=b;j++){
                    scanf("%s",mpa[i][j]+1);
                    for(int k=1;k<=c;k++){
                        if(mpa[i][j][k]=='S')st=node(i,j,k,0);
                        if(mpa[i][j][k]=='E')et=node(i,j,k,0);
                    }
                }
            }
            
            bfs();
            
        }
        return 0;
    }

    2018-08-30

  • 相关阅读:
    HTML DOM-->内部样式表与外部样式表的读写
    HTML DOM-->行间样式表的读写
    HTML DOM-->获取文本节点
    HTML DOM-->获取属性节点
    HTML DOM-->获取标签(元素)节点
    HTML DOM-->简介
    JS 浏览器BOM-->setTimeout() 方法
    JS 浏览器BOM-->clearInterval() 方法
    JS 浏览器BOM-->setInterval() 方法
    JS 浏览器BOM-->onresize方法
  • 原文地址:https://www.cnblogs.com/00isok/p/9563139.html
Copyright © 2020-2023  润新知