2026年--Lc343-1926. 迷宫中离入口最近的出口(图 - 广度优先搜索)--java版

1.题目




2.思路

List<int[]> qu=List of(new int[]{beginX,beginY});

//创建一个 List<int[]>,并把一个二维坐标 (beginX, beginY)(用 int[] 表示)放进去作为列表的第一个元素。

(1)每次从当前位置 (x,y) 走到相邻四格。

int[][] directions={{-1,0},{1,0},{0,-1},{0,1}};

(2)初始化:行列、访问数组、入口坐标

vis 用于防止重复入队导致死循环/超时。

入口先标记已访问。

(3)按层 BFS:从入口开始,每次扩展一圈,ans 记录当前圈的步数;第一次走到边界的可走格就是最近出口,直接返回 ans;没有就返回 -1。

3.代码实现

java 复制代码
class Solution {
    static int[][] directions={{-1,0},{1,0},{0,-1},{0,1}};
    public int nearestExit(char[][] maze, int[] entrance) {
        //行数
        int m=maze.length;
        //列数
        int n=maze[0].length;
        //标记访问过的元素
        boolean[][] vis=new boolean[m][n];
        //起点
        int beginX=entrance[0];
        int beginY=entrance[1];
        //访问标记
        vis[beginX][beginY]=true;
        //创建一个 List<int[]>,并把一个二维坐标 (beginX, beginY)(用 int[] 表示)放进去作为列表的第一个元素。
        List<int[]> qu=List.of(new int[]{beginX,beginY});

        for(int ans=1;!qu.isEmpty();ans++)
        {
            List<int[]> tmp=qu;
            qu=new ArrayList<>();
            for(int[] p:tmp)
            {//注意起点不算终点,不能在这里判断p是不是终点
            for(int[] d:directions)
            {//起点不算终点,不能判断p是不是终点
                int x=p[0]+d[0];
                int y=p[1]+d[1];
                //之前没有访问过的元素
                if(0<=x&&x<m&&0<=y&&y<n&&maze[x][y]=='.'&&vis[x][y]==false)
                {
                  if(x==0||y==0||x==m-1||y==n-1)
                  {
                    //到达边界,也就是到达终点
                    return ans;
                  }
                  //访问过的元素进行标记
                  vis[x][y]=true;
                  qu.add(new int[]{x,y});
                }
            }
                
            }
        }
        return -1;//无法到达终点
        
    }
}
相关推荐
7哥♡ۣۖᝰꫛꫀꪝۣℋ11 分钟前
Spring-cloud\Eureka
java·spring·微服务·eureka
老毛肚24 分钟前
手写mybatis
java·数据库·mybatis
两点王爷26 分钟前
Java基础面试题——【Java语言特性】
java·开发语言
choke23330 分钟前
[特殊字符] Python 文件与路径操作
java·前端·javascript
大江东去浪淘尽千古风流人物32 分钟前
【VLN】VLN(Vision-and-Language Navigation视觉语言导航)算法本质,范式难点及解决方向(1)
人工智能·python·算法
choke23335 分钟前
Python 基础语法精讲:数据类型、运算符与输入输出
java·linux·服务器
岁岁种桃花儿1 小时前
CentOS7 彻底卸载所有JDK/JRE + 重新安装JDK8(实操完整版,解决kafka/jps报错)
java·开发语言·kafka
努力学算法的蒟蒻1 小时前
day79(2.7)——leetcode面试经典150
算法·leetcode·职场和发展
2401_841495641 小时前
【LeetCode刷题】二叉树的层序遍历
数据结构·python·算法·leetcode·二叉树··队列
AC赳赳老秦1 小时前
2026国产算力新周期:DeepSeek实战适配英伟达H200,引领大模型训练效率跃升
大数据·前端·人工智能·算法·tidb·memcache·deepseek