当前位置: 首页 > news >正文

1216走迷宫

1216走迷宫

⭐️难度:简单
🌟考点:bfs
📖
在这里插入图片描述

📚

import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();
        int m = sc.nextInt();
        int [][] a = new int [n + 1][m + 1];

        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= m; j++) {
                a[i][j] = sc.nextInt();
            }
        }
        int x1 = sc.nextInt();
        int y1 = sc.nextInt();
        int x2 = sc.nextInt();
        int y2 = sc.nextInt();

        boolean [][] v = new boolean[n+2][m+2];// 是否被访问
        int [][] d = new int[n+1][m+1]; // 起点到各个点的距离
        for (int i = 1; i <= n; i++) {
            Arrays.fill(d[i],(int)1e9); // 先全部设为无限大,不可到达
        }
        Queue<int[]> q = new LinkedList<>(); // 队列记录即将遍历的结点

        // bfs
        d[x1][y1] = 0;
        q.add(new int[]{x1,y1});
        int[] dx = {0,0,1,-1}; // 分别对应:右左上下 四个操作
        int[] dy = {1,-1,0,0};
        while(!q.isEmpty()){
            int []xy = q.poll();
            int x = xy[0];
            int y = xy[1];
            if(v[x][y]) continue; // 已经被访问过了
            v[x][y] = true;
            for(int i = 0;i < 4;i++){
                int nx = x + dx[i];
                int ny = y + dy[i];
                if(nx > n || nx < 1 || ny > m || ny < 1 || a[nx][ny] == 0 || v[nx][ny]) continue; // 该点不合法:超出范围或不可访问或已被访问
                q.add(new int[]{nx,ny});
                d[nx][ny] = d[x][y] + 1; // 在原来的步数上+1,就走到了当前这个结点
            }
        }
        if(!v[x2][y2]){ // 没有被访问,不可到达
            System.out.println("-1");
        }else{
            System.out.println(d[x2][y2]);
        }
    }
}

细节:Boolean和boolean不一样,Boolean不会初始化为false,会报空指针异常。

相关文章:

  • OSPF | LSDB 链路状态数据库 / SPF 算法 / 实验
  • 接口自动化测试用例
  • 电路基础【2】:三极管基础:PNP与NPN三极管详解
  • 微服务》》四个问题
  • HTTP相关问题(AI回答)
  • 【Linux-传输层协议TCP】流量控制+滑动窗口+拥塞控制+延迟应答+捎带应答+面向字节流+粘包问题+TCP异常情况+TCP小结
  • 谷歌Gemini 3大模型发布,AI领域再掀波澜!
  • 数据结构与算法-图论-欧拉路径和欧拉回路(有向图和无向图,骑马修栅栏,单词游戏 play on words)详细代码注解
  • 【精华】学校机房电脑摆脱网络控制
  • Spring Security vs Shiro vs Sa-Token
  • ESP-IDF中FreeRTOS的三种任务调度算法
  • C语言中的指针与函数
  • 2025-03-15 学习记录--C/C++-C语言 %.0f的使用和round函数(实现四舍五入)
  • Word 小黑第4套
  • 蓝耘MaaS平台:阿里QWQ应用拓展与调参实践
  • MySQL(事物下)
  • java的split分隔,使用regex
  • LabVIEW电池内阻精确测量系统
  • CVE-2017-10271
  • 多时间尺度的配电网深度强化学习无功优化策略的Python示例代码框架
  • 人民日报:不能层层加码,要层层负责
  • 习近平在河南洛阳市考察调研
  • 夜读丨为萤火虫哭泣的夜晚
  • 上海发文加强直播经济技能人才培养:三年新培养持证直播技能人才5万名
  • “80后”萍乡市安源区区长邱伟,拟任县(区)委书记
  • 特朗普政府涉税改法案遭众议院预算委员会否决