关注
 为你的题解加了注释: import java.util.*;  /**  * 这个程序计算在一个二维网格中从起点到终点的最短步数。  * 网格中的每个单元格可以是空格('.')、障碍物('*')或已经走过的路径('/')。  */ public class Main {     public static void main(String[] args) {         Scanner sc = new Scanner(System.in); // 创建一个扫描器对象用于输入          // 读取第一行输入,获取网格的行数(n)和列数(m)         String[] s1 = sc.nextLine().split(" ");         int n = Integer.parseInt(s1[0]); // 行数         int m = Integer.parseInt(s1[1]); // 列数          // 读取第二行输入,获取起点和终点的坐标         String[] s2 = sc.nextLine().split(" ");         int sti = Integer.parseInt(s2[0]); // 起点行坐标         int stj = Integer.parseInt(s2[1]); // 起点列坐标         int ovi = Integer.parseInt(s2[2]); // 终点行坐标         int ovj = Integer.parseInt(s2[3]); // 终点列坐标          // 初始化字符数组表示网格         char[][] grid = new char[n][m];          // 逐行读取输入并填充网格数组         for (int i = 0; i < n; i++) {             String s = sc.nextLine();             for (int j = 0; j < m; j++) {                 grid[i][j] = s.charAt(j);             }         }          // 检查起点和终点是否有障碍物         if (grid[sti - 1][stj - 1] == '*' || grid[ovi - 1][ovj - 1] == '*') {             System.out.println(-1); // 如果起点或终点有障碍物,则无法到达             return;         }          // 创建队列用于广度优先搜索(BFS)         Queue<int> queue = new LinkedList<>();          // 将起点加入队列,并初始化步数为0         int[] node = {0, sti - 1, stj - 1};         queue.offer(node);          // 调用方法计算最短步数         int result = minStep(n, m, grid, ovi - 1, ovj - 1, queue);          // 输出结果         System.out.println(result);     }      /**      * 使用广度优先搜索算法计算从起点到终点的最短步数。      *      * @param n      网格的行数      * @param m      网格的列数      * @param arr    网格数组      * @param ovi    终点行坐标      * @param ovj    终点列坐标      * @param queue  用于BFS的队列      * @return       最短步数或-1如果无法到达      */     public static int minStep(int n, int m, char[][] arr, int ovi, int ovj, Queue<int> queue) {         // BFS主循环         while (queue.size() != 0) {             // 取出队列中的第一个节点             int[] node = queue.poll();             int step = node[0]; // 当前步数             int i = node[1]; // 当前行坐标             int j = node[2]; // 当前列坐标              // 如果当前节点是终点,则返回步数             if (i == ovi && j == ovj) {                 return step;             }              // 向右移动             if (j + 1 < m && arr[i][j + 1] == '.') {                 int[] node1 = {step + 1, i, j + 1};                 queue.offer(node1);                 arr[i][j + 1] = '/'; // 标记已走过的路径             }              // 向下移动             if (i + 1 < n && arr[i + 1][j] == '.') {                 int[] node1 = {step + 1, i + 1, j};                 queue.offer(node1);                 arr[i + 1][j] = '/'; // 标记已走过的路径             }              // 向左移动             if (j - 1 >= 0 && arr[i][j - 1] == '.') {                 int[] node1 = {step + 1, i, j - 1};                 queue.offer(node1);                 arr[i][j - 1] = '/'; // 标记已走过的路径             }              // 向上移动             if (i - 1 >= 0 && arr[i - 1][j] == '.') {                 int[] node1 = {step + 1, i - 1, j};                 queue.offer(node1);                 arr[i - 1][j] = '/'; // 标记已走过的路径             }         }          // 如果无法到达终点,返回-1         return -1;     } }</int></int>
    点赞 
相关推荐
 点赞 评论 收藏   
分享
 牛客热帖
更多 
 正在热议
 更多 
 # 秋招开始捡漏了吗 #
 17609次浏览 109人参与
# 找工作八股要背到什么程度? #
 1533次浏览 37人参与
# “vivo”个offer #
 47411次浏览 314人参与
# 上班后,才发现大学__白学了 #
 3150次浏览 22人参与
# 辞职后的日常 #
 15953次浏览 84人参与
# 用一句话形容你的团队氛围 #
 1383次浏览 35人参与
# 你实习是赚钱了还是亏钱了? #
 1846次浏览 22人参与
# 一人一个landing小技巧 #
 127937次浏览 1463人参与
# 打工人的精神状态 #
 101678次浏览 1314人参与
# 满帮集团求职进展汇总 #
 8365次浏览 71人参与
# 规定下班时间vs实际下班时间 #
 56196次浏览 332人参与
# 你找工作是从容有余 or 匆忙滚爬? #
 1156次浏览 24人参与
# 上班到公司第一件事做什么? #
 99139次浏览 681人参与
# 分享一个让你热爱工作的瞬间 #
 43736次浏览 395人参与
# 今年秋招还有金九银十吗 #
 19105次浏览 166人参与
# 我和mentor的爱恨情仇 #
 79661次浏览 434人参与
# 数字马力求职进展汇总 #
 212727次浏览 1680人参与
# 你见过哪些工贼行为 #
 32638次浏览 151人参与
# 被同事甩锅了怎么办 #
 25560次浏览 100人参与
# 我想去国央企的原因 #
 68726次浏览 413人参与
# 华为保温 #
 113851次浏览 442人参与
查看14道真题和解析