• 1096. 地牢大师(BFS)


    题目链接:https://www.acwing.com/problem/content/description/1098/

    题解:

    三维的一个BFS,visit数组和结果数组合并,一定要记得每次BFS清空visit数组即可

    AC代码(Java):

    import java.util.LinkedList;
    import java.util.Queue;
    import java.util.Scanner;
    
    /**
     * @author: doudou
     * @date: Created in 2020/4/28
     * @description:
     * @version: 1.0
     */
    public class Main {
        private static char[][][] a = new char[105][105][105];
        private static int[][][] st = new int[105][105][105];
        private static int[] zz = {1, -1, 0, 0, 0, 0};
        private static int[] zx = {0, 0, -1, 1, 0, 0};
        private static int[] zy = {0, 0, 0, 0, 1, -1};
        private static int l, r, c;
    
        public static int bfs(Three start, Three end) {
            Queue<Three> q = new LinkedList<>();
            q.add(start);
            for (int i = 0;i < l;i++)
                for (int j = 0; j < r; j++)
                    for (int k = 0;k < c; k++) st[i][j][k] = -1;
            st[start.z][start.x][start.y] = 0;
            while (!q.isEmpty()) {
                Three now = q.poll();
                for (int i = 0; i < 6; i++) {
                    int futurez = now.z + zz[i];
                    int futurex = now.x + zx[i];
                    int futurey = now.y + zy[i];
                    if (futurez < 0 || futurez >= l || futurex < 0 || futurex >= r || futurey < 0 || futurey >= c) continue;
                    if (st[futurez][futurex][futurey] != -1) continue;
                    if (futurez == end.z && futurex == end.x && futurey == end.y) return st[now.z][now.x][now.y] + 1;
                    if (a[futurez][futurex][futurey] == '#') continue;
                    q.offer(new Three(futurez,futurex,futurey));
                    st[futurez][futurex][futurey] = st[now.z][now.x][now.y] + 1;
                }
            }
            return -1;
        }
    
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            while (true) {
                l = sc.nextInt();
                r = sc.nextInt();
                c = sc.nextInt();
                if (l == 0 && r == 0 && c == 0) break;
                sc.nextLine();
                Three start = null, over = null;
                for (int i = 0; i < l; i++) {
                    for (int j = 0; j < r; j++) {
                        char[] chars = sc.nextLine().toCharArray();
                        a[i][j] = chars;
                        for (int k = 0; k < chars.length; k++) {
                            if (chars[k] == 'S') {
                                start = new Three(i, j, k);
                            }
                            if (chars[k] == 'E') {
                                over = new Three(i, j, k);
                            }
                        }
                        // System.out.println(Arrays.toString(chars));
                    }
                    sc.nextLine();
                }
                int res = bfs(start, over);
                if (res != -1 ) {
                    System.out.println("Escaped in "+res+" minute(s).");
                }else {
                    System.out.println("Trapped!");
                }
            }
        }
    }
    
    class Three {
        int z, x, y;
    
        Three(int z, int x, int y) {
            this.z = z;
            this.x = x;
            this.y = y;
        }
    }
    
  • 相关阅读:
    小米手机刷开发版教程(超简单)
    Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]
    git常用命令
    SpringCloud Feign对Hystrix(断路由)的支持
    SpringCloud Feign使用详解
    SpringCloud高可用Eureka搭建
    springCloud Hystrix 断路由
    SpringBoot数据库连接池常用配置
    springBoot actuator监控配置及使用
    springCloud zuul网关服务
  • 原文地址:https://www.cnblogs.com/doubest/p/12794671.html
Copyright © 2020-2023  润新知