当前位置: 首页 > 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,会报空指针异常。

http://www.dtcms.com/a/70756.html

相关文章:

  • 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示例代码框架
  • SpringBoot中的定时任务实现方式有哪些?
  • 【医学影像 AI】基于深度学习的 ROP 病变检测图像评估系统
  • ISP--Gamma Correction
  • javaWeb的详细笔记(超详细版本)
  • ANSI编码
  • Python中的静态方法如何使用?
  • 《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(42)九龙神火罩拓扑 - 课程表排序(拓扑排序)
  • MIFNet (论文阅读笔记)
  • 4.0 相机引导XY轴控制螺丝枪打螺丝
  • 信创环境下TOP5甘特图工具对比:从功能到适配性测评