蓝桥杯2019年第十届JavaB组真题题目+解析+代码+答案:5.迷宫

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 蓝桥杯2019年第十届JavaB组真题题目+解析+代码+答案:5.迷宫

题目描述:

下图给出了一个迷宫的平面图,其中标记为1的是障碍,0的是可以通行的地方

010000

000100

001001

110000

迷宫的入口为左上角,出口为右下角,在迷宫中,只能从一个位置走到这 个它的上、下、左、右四个方向之一。

对于上面的迷宫,从入口开始,可以按DRRURRDDDR 的顺序通过迷宫, 一共 10 步。其中 D、U、L、R 分别表示向下、向上、向左、向右走。

对于下面这个更复杂的迷宫(30 行 50 列),请找出一种通过迷宫的方式, 其使用的步数最少,在步数最少的前提下,请找出字典序最小的一个作为答案。 请注意在字典序中D<L<R<U。

解题思路:

> 本题是典型的迷宫问题,可以利用bfs(广度优先遍历)
> 也可以用dfs进行搜索路径,但最终要字典序最小,所以dfs不太容易操作
> 广搜的顺义要以D-L-R-U进行,因为要字典序最小
> 这点可以利用4次循环即可
> 怎么判断是最小路径呢?
> 因为是广搜,要一层一层的搜
> 所以当前节点探寻了每个和它相邻的节点
> 一但到达终点即退出,最小路径为探索的层数,这点和深搜不太相同,
> dfs是不断进行递归回溯,进行比较找最小值
> 而bfs可以利用自身优势确定最小值

代码:

public class Main {
  public static int dir[][] = new int[][] {{1,0},{0,-1},{0,1},{-1,0}};
  public static char direction[] = new char[] {'D','L','R','U'};
  public static int[][] map=new int[30][50];
  public static boolean[][] visit=new boolean[30][50];
    public static void main(String[] args){
      Scanner sc=new Scanner(System.in);
      for(int i=0;i<30;i++) {
        String s=sc.next();
        for(int j=0;j<50;j++) {
          map[i][j]=s.charAt(j)-'0';
        }
      }
      bfs(new Point(0, 0));
  }
    public static void bfs(Point start) {
      Queue<Point> q=new LinkedList<Point>();
      q.add(start);
      visit[start.i][start.j]=true;
      while(!q.isEmpty()) {
        Point p=q.peek();
        if(p.i==29&&p.j==49) {
          System.out.println(p.step);
          System.out.println(p.way);
          return;
        }
        for(int i=0;i<4;i++) {
          int new_i=p.i+dir[i][0];
          int new_j=p.j+dir[i][1];
          Point temp=new Point(new_i,new_j);
          if(new_i>=0&&new_j>=0&&new_i<30&&new_j<50&&!visit[new_i][new_j]&&map[new_i][new_j]!=1) {
            visit[new_i][new_j]=true;
            temp.step=p.step+1;
            temp.way=p.way+direction[i];
            q.add(temp);
          }
        }
        q.poll();
      }
    }
}
class Point{
  int i;
  int j;
  int step;
  String way;
  public Point() {
    i=j=step=0;
    way="";
  }
  public Point(int i,int j) {
    this.i=i;
    this.j=j;
    step=0;
    way="";
  }
}

答案:

(最少一共186步)
DDDDRRURRRRRRDRRRRDDDLDDRDDDDDDDDDDDDRDDRRRURRUURRDDDDRDRRRRRRDRRURRDDDRRRRUURUUUUUUULULLUUUURRRRUULLLUUUULLUUULUURRURRURURRRDDRRRRRDDRRDDLLLDDRRDDRDDLDDDLLDDLLLDLDDDLDDRRRRRRRRRDDDDDDRR


目录
相关文章
|
20天前
|
存储 安全 Java
系统安全架构的深度解析与实践:Java代码实现
【11月更文挑战第1天】系统安全架构是保护信息系统免受各种威胁和攻击的关键。作为系统架构师,设计一套完善的系统安全架构不仅需要对各种安全威胁有深入理解,还需要熟练掌握各种安全技术和工具。
57 10
|
19天前
|
前端开发 JavaScript 开发者
揭秘前端高手的秘密武器:深度解析递归组件与动态组件的奥妙,让你代码效率翻倍!
【10月更文挑战第23天】在Web开发中,组件化已成为主流。本文深入探讨了递归组件与动态组件的概念、应用及实现方式。递归组件通过在组件内部调用自身,适用于处理层级结构数据,如菜单和树形控件。动态组件则根据数据变化动态切换组件显示,适用于不同业务逻辑下的组件展示。通过示例,展示了这两种组件的实现方法及其在实际开发中的应用价值。
27 1
|
1月前
|
机器学习/深度学习 人工智能 算法
揭开深度学习与传统机器学习的神秘面纱:从理论差异到实战代码详解两者间的选择与应用策略全面解析
【10月更文挑战第10天】本文探讨了深度学习与传统机器学习的区别,通过图像识别和语音处理等领域的应用案例,展示了深度学习在自动特征学习和处理大规模数据方面的优势。文中还提供了一个Python代码示例,使用TensorFlow构建多层感知器(MLP)并与Scikit-learn中的逻辑回归模型进行对比,进一步说明了两者的不同特点。
63 2
|
3天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
15 2
|
1月前
|
缓存 Java 程序员
Map - LinkedHashSet&Map源码解析
Map - LinkedHashSet&Map源码解析
66 0
|
1月前
|
算法 Java 容器
Map - HashSet & HashMap 源码解析
Map - HashSet & HashMap 源码解析
52 0
|
1月前
|
存储 Java C++
Collection-PriorityQueue源码解析
Collection-PriorityQueue源码解析
60 0
|
1月前
|
安全 Java 程序员
Collection-Stack&Queue源码解析
Collection-Stack&Queue源码解析
80 0
|
3天前
|
存储 安全 Linux
Golang的GMP调度模型与源码解析
【11月更文挑战第11天】GMP 调度模型是 Go 语言运行时系统的核心部分,用于高效管理和调度大量协程(goroutine)。它通过少量的操作系统线程(M)和逻辑处理器(P)来调度大量的轻量级协程(G),从而实现高性能的并发处理。GMP 模型通过本地队列和全局队列来减少锁竞争,提高调度效率。在 Go 源码中,`runtime.h` 文件定义了关键数据结构,`schedule()` 和 `findrunnable()` 函数实现了核心调度逻辑。通过深入研究 GMP 模型,可以更好地理解 Go 语言的并发机制。
|
16天前
|
消息中间件 缓存 安全
Future与FutureTask源码解析,接口阻塞问题及解决方案
【11月更文挑战第5天】在Java开发中,多线程编程是提高系统并发性能和资源利用率的重要手段。然而,多线程编程也带来了诸如线程安全、死锁、接口阻塞等一系列复杂问题。本文将深度剖析多线程优化技巧、Future与FutureTask的源码、接口阻塞问题及解决方案,并通过具体业务场景和Java代码示例进行实战演示。
36 3

推荐镜像

更多