首页 > 其他分享 >HJ43 迷宫问题

HJ43 迷宫问题

时间:2023-07-21 15:11:09浏览次数:44  
标签:ny int 迷宫 visited 问题 HJ43 length maze path

1. 题目

读题

 HJ43 迷宫问题

 

考查点

 

2. 解法

思路

 

代码逻辑

 

具体实现

import java.util.ArrayList;
import java.util.List;

public class Main {

    public static void main(String[] args) {
        // 迷宫地图
        int[][] maze = {
                {0, 1, 0, 0, 0},
                {0, 1, 0, 1, 0},
                {0, 0, 0, 0, 0},
                {0, 1, 1, 1, 0},
                {0, 0, 0, 1, 0}
        };
        // 访问数组
        int[][] visited = new int[maze.length][maze[0].length];
        // 路径列表
        List<int[]> path = new ArrayList<>();
        // 调用递归函数
        dfs(maze, visited, path, 0 ,0);
    }

    // 定义一个递归函数,传入当前的坐标和一个列表来存储路径
    public static boolean dfs(int[][] maze, int[][] visited,
                              List<int[]> path,
                              int x ,int y) {
        // 将当前位置加入路径列表,并将访问数组对应位置设为1
        path.add(new int[]{x ,y});
        visited[x][y] = 1;
        // 判断是否到达了右下角,也就是终点
        if (x == maze.length -1 && y == maze[0].length -1) {
            // 打印出路径列表,并返回true
            for (int[] pos : path) {
                System.out.println("(" + pos[0] + "," + pos[1] + ")");
            }
            return true;
        }
        // 定义四个方向的移动
        int[] dx = {-1 ,1 ,0 ,0};
        int[] dy = {0 ,0 ,-1 ,1};
        // 尝试向四个方向移动
        for (int i = 0; i <4; i++) {
            int nx = x + dx[i];
            int ny = y + dy[i];
            // 判断是否越界或者遇到墙壁或者已经访问过
            if (nx < 0 || nx >= maze.length || ny < 0 || ny >= maze[0].length ||
                    maze[nx][ny] ==1 || visited[nx][ny] ==1) {
                continue;
            }
            // 如果可以走,就递归调用自己
            if (dfs(maze ,visited ,path ,nx ,ny)) {
                return true;
            }
        }
        // 如果四个方向都不能走或者已经走过,就回溯
        path.remove(path.size() -1);
        visited[x][y] = 0;
        return false;
    }
}

 

3. 总结

标签:ny,int,迷宫,visited,问题,HJ43,length,maze,path
From: https://www.cnblogs.com/shoshana-kong/p/17548666.html

相关文章

  • 解决element ui 下拉框表单验证切换选项就直接触发的问题
    elementui下拉框表单验证正确使用步骤1.确保form组件的:model属性绑定了表单的数据对象  2.确保form组件的rules绑定了对应的rule 3.确认要验证的表单item绑定了对应的prop属性注意:prop属性的名称要和rule里面的名称一样并且和v-model的属性名称一样才行 完成以上......
  • 多表查询和left join需要注意的问题
    一、多表查询1、内连接隐式内连接使用一张以上的表做查询就是多表查询语法:SELECT{DISTINCT}*|列名..FROM表名别名,表名1别名 {WHERE限制条件ORDERBY排序字段ASC|DESC...}范例:emp表DROPTABLE"SCOTT"."EMP";CREATETABLE"SCOTT"."EMP"("EMPNO"NUMBE......
  • java Apollo配置和yml配置同时存在的问题
    当JavaApollo配置和yml配置同时存在时,可能会导致以下问题:1.配置冲突:JavaApollo和yml配置文件可能定义了相同的配置项,导致冲突或覆盖。这可能会导致应用程序在运行时的行为与预期不同。2.配置失效:如果JavaApollo和yml配置文件中定义了相同的配置项,且两者的值不一致,那么最终生效......
  • DBUtils不同版本的问题
    DBUtils版本问题前言事情的起因是,原本在pycharm上开发的代码,因为要使用到线程池,所以就按安装了DBUtils,在windows上运行代码倒没什么问题,后因代码运行时需要占用的内存过多,所以代码要转移到Linux服务器上,问题由之而来,运行代码时总会会报出找不到DBUtils库的错误,经过几番反复确认......
  • codility算法题:猫过桥问题
    1.题目读题  考查点 2.解法思路 代码逻辑 具体实现 publicclassSolutions{publicstaticvoidmain(String[]args){System.out.println(solution(10,newint[]{2,3,4,8},newint[]{2,5}));System.out.println(solution(10,......
  • 解决Clipse Java内存溢出问题的几种方案
    解决ClipseJava内存溢出问题的几种方案随着Java应用程序的复杂度不断提高,内存溢出成为一个常见的问题。当应用程序超出了可用内存资源时,就会发生内存溢出错误。而在ClipseJava编程开发中,也常常会遇到这样的问题。为了解决这个问题,本文将介绍一些可行的解决方案。1.增加JVM堆......
  • 在Vue3中,解决 Echart tooltip 不显示的问题
    为什么在Vue中使用ECharts时图表显示异常?Vue3,中使用reactive及ref会导致ECharts的对象实例被代理成为响应式对象,影响ECharts对内部属性的访问,可能会导致图表无法正确显示等一系列意外问题,且会由于深度监听而极大地降低图表展示性能。解决方案为:使用普通变量声明ECh......
  • IDEA与Maven在编译、构建、运行中涉及问题整理
    Maven构建后class、jar、war等文件输出目录Maven默认文件输出目录在根目录的target目录下,但是可以通过配置进行修改。${project.build.directory}:/target目录。${project.basedir}:pom.xml所在目录。class文件输出位置修改通过pom.xml增加如下配置<build><!--...-->......
  • python斐波那契兔子问题
    Python实现斐波那契兔子问题作为一名经验丰富的开发者,我将帮助你解决Python中的斐波那契兔子问题。在开始之前,让我们先了解一下整个解决问题的流程。接下来,我将为你提供每一步所需的代码,并对代码进行注释以帮助你理解。流程概述斐波那契兔子问题是一个经典的数学问题,其定义如下:......
  • TCP就拆不动粘包/拆包问题
    粘包/拆包问题一直都存在,只是到TCP就拆不动了。OSIopen-system-InterconnectionTCP/IP5层协议栈应用层和操作系统的边界是系统调用,对应到网络编程是socketapiTCP/UDP概况TCP粘包问题TCP/IP报头深思 OSI开放系统互联 定义了网络框架,以层为单位实现协议,同时......