Java 迷宫问题

GA666666 2021-05-23 AM 39℃ 2条

最近在准备第十二届蓝桥杯国赛,上一次国赛因为知识面狭窄很多算法都写不出。今年学习数据结构后有一些提升,虽然今年中心不在比赛,但是也希望能得个三等奖就知足了。


其实蓝桥杯并不算难,里面很多算法都是死的,对于省赛来说,基本不需要算法知识就能得奖,但是对于国赛,省赛像一把削皮刀剔除一些编程能力相对弱一些的选手。
废话不多说,之前一致想把BFS和DFS搞懂,但是被各种事情左右,一直没来的及。这次通过国赛复习用几个形象的例子来进行记忆


请输入图片描述

主要用到BFS的回溯算法
代码如下:

public class Test {
    public static void main(String[] args) {
        int[][] map = new int[10][10];
        init_map(map);
        print_map(map);
        bfs(map, 1, 1);
        print_map(map);
    }

    private static boolean bfs(int[][] map, int i, int j) {
        if (map[8][8] == 2) {
            return true;
        } else {
            if (map[i][j] == 0) {
                map[i][j] = 2;
                //此处先后顺序与方向顺序有关
                if (bfs(map, i+1, j)) return true;
                else if (bfs(map, i, j + 1)) return true;
                else if (bfs(map, i - 1, j)) return true;
                else if (bfs(map, i, j - 1)) return true;
                else
                    map[i][j] = 3;

            } else {
                return false;
            }
        }
        return false;
    }

    private static void print_map(int[][] map) {
        System.out.println("------------------Map----------------");
        for (int[] ap : map) {
            for (int a : ap) {
                if (a != 2)
                    System.out.print(a + "\t");
                else
                    System.out.print("#\t");
            }
            System.out.println();
        }
        System.out.println("-------------------------------------");
    }

    private static void init_map(int[][] map) {
        for (int i = 0; i < map.length; i++) {
            map[i][0] = 1;
            map[i][map.length - 1] = 1;
        }
        for (int i = 0; i < map.length; i++) {
            map[0][i] = 1;
            map[map[i].length - 1][i] = 1;
        }
        //创建障碍
        for (int i = 9; i > 3; i--) {
            map[2][i] = 1;
        }
        for (int i = 0; i < 8; i++) {
            map[4][i] = 1;
            map[6][i] = 1;
        }
    }
}

运行结果:
运行结果

标签: none

非特殊说明,本博所有文章均为博主原创。

评论啦~



已有 2 条评论


  1. GA666666
    GA666666 博主

    又测试了几次,代码并不完美,有空再改进

    回复 2021-05-26 23:42
    1. Dylan
      Dylan

      完美,太完美了,打造知识架构3.0!高旭yyds!

      回复 2022-12-06 17:12