博客
关于我
蓝桥杯31天冲刺打卡题解(Day4)
阅读量:797 次
发布时间:2023-03-25

本文共 1972 字,大约阅读时间需要 6 分钟。

为了找到迷宫中从起点到终点的最短路径并确保路径字典序最小,我们可以使用广度优先搜索(BFS)结合路径优先级处理的方法。

方法思路

  • 广度优先搜索(BFS):BFS适合寻找最短路径,因为它逐层扩展,先到达的节点距离起点最近。
  • 字典序优先级:在扩展时,按照字典序优先级处理方向(如先上、后下、后左、后右),确保在同一层次下,路径字典序最小。
  • 路径记录:使用队列存储当前路径,记录每个点的位置和路径字符串,确保路径可追溯。
  • 解决代码

    import java.util.LinkedList;
    import java.util.Queue;
    import java.util.Scanner;
    public class Main {
    static final int N = 30, M = 50;
    static char[][] map = new char[N][M];
    static boolean[][] st = new boolean[N][M];
    public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    for (int i = 0; i < N; i++) {
    map[i] = sc.next().toCharArray();
    }
    bfs();
    }
    private static void bfs() {
    Queue
    q = new LinkedList<>();
    q.offer(new Point(0, 0, ""));
    st[0][0] = true;
    int[] dx = { -1, 1, 0, 0 };
    int[] dy = { 0, 0, -1, 1 };
    char[] directions = { 'U', 'D', 'L', 'R' };
    while (!q.isEmpty()) {
    Point t = q.poll();
    if (t.x == N - 1 && t.y == M - 1) {
    System.out.println(t.s);
    return;
    }
    for (int i = 0; i < 4; i++) {
    int x = t.x + dx[i];
    int y = t.y + dy[i];
    if (x < 0 || x >= N || y < 0 || y >= M) {
    continue;
    }
    if (map[x][y] == '0' && !st[x][y]) {
    st[x][y] = true;
    String path = t.s + directions[i];
    q.offer(new Point(x, y, path));
    }
    }
    }
    }
    static class Point {
    int x;
    int y;
    String s;
    Point(int x, int y, String s) {
    this.x = x;
    this.y = y;
    this.s = s;
    }
    }
    }

    代码解释

  • 初始化:读取迷宫布局,初始化起点,并将其加入队列。
  • 方向处理:定义四个方向,按照字典序优先级排列,确保扩展时优先处理字典序较小的方向。
  • BFS循环:从队列中取出当前点,检查是否为终点。如果不是,依次尝试四个方向,检查是否可通行且未被访问过。
  • 路径记录:将新的点加入队列,并记录路径字符串。
  • 终点输出:当找到终点时,输出路径字符串。
  • 这种方法确保了在找到最短路径的同时,路径的字典序也是最小的。

    转载地址:http://czhfk.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现highest response ratio next高响应比优先调度算法(附完整源码)
    查看>>
    Objective-C实现hill climbing爬山法用来寻找函数的最大值算法(附完整源码)
    查看>>
    Objective-C实现hornerMethod霍纳法算法(附完整源码)
    查看>>
    Objective-C实现Http Post请求(附完整源码)
    查看>>
    Objective-C实现Http协议下载文件(附完整源码)
    查看>>
    Objective-C实现IIR 滤波器算法(附完整源码)
    查看>>
    Objective-C实现IIR数字滤波器(附完整源码)
    查看>>
    Objective-C实现insertion sort插入排序算法(附完整源码)
    查看>>
    Objective-C实现integer partition整数分区算法(附完整源码)
    查看>>
    Objective-C实现integerPartition整数划分算法(附完整源码)
    查看>>
    Objective-C实现interpolation search插值搜索算法(附完整源码)
    查看>>
    Objective-C实现Interpolation search插值查找算法(附完整源码)
    查看>>
    Objective-C实现intersection交集算法(附完整源码)
    查看>>
    Objective-C实现intro sort内省排序算法(附完整源码)
    查看>>
    Objective-C实现inversions倒置算法(附完整源码)
    查看>>
    Objective-C实现isalpha函数功能(附完整源码)
    查看>>
    Objective-C实现islower函数功能(附完整源码)
    查看>>
    Objective-C实现isPowerOfTwo算法(附完整源码)
    查看>>
    Objective-C实现ItemCF算法(附完整源码)
    查看>>
    Objective-C实现ItemCF算法(附完整源码)
    查看>>