题解 | 走迷宫
走迷宫
https://www.nowcoder.com/practice/e88b41dc6e764b2893bc4221777ffe64
import java.util.Scanner; import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 String s = in.nextLine(); String[] split = s.split(" "); String position = in.nextLine(); String[] positionS = position.split(" "); Integer first = new Integer(split[0]); Integer second = new Integer(split[1]); String[][] write = new String[first][second]; for (int i = 0; i < first; i++) { String data = in.nextLine(); String[] s1 = data.split(""); write[i] = s1; } System.out.println(getResult(positionS, write, first - 1, second - 1)); } public static int getResult( String[] positionS, String[][] write, Integer first, Integer second) { Queue<int[]> data = new LinkedList<>(); data.add(new int[] {new Integer(positionS[0]) - 1, new Integer(positionS[1]) - 1, 0}); Integer endX = new Integer(positionS[2]) - 1; Integer endY = new Integer(positionS[3]) - 1; while (!data.isEmpty()) { int[] poll = data.poll(); if (poll[0] == endX && poll[1] == endY) { return poll[2]; } if (poll[0] + 1 <= first && write[poll[0] + 1][poll[1]].equals(".")) { data.offer(new int[] {poll[0] + 1, poll[1], poll[2] + 1}); write[poll[0] + 1][poll[1]] = "/"; } if (poll[0] - 1 >= 0 && write[poll[0] - 1][poll[1]].equals(".")) { data.offer(new int[] {poll[0] - 1, poll[1], poll[2] + 1}); write[poll[0] - 1][poll[1]] = "/"; } if (poll[1] + 1 <= second && write[poll[0]][poll[1] + 1].equals(".")) { data.offer(new int[] {poll[0], poll[1] + 1, poll[2] + 1}); write[poll[0]][poll[1] + 1] = "/"; } if (poll[1] - 1 >= 0 && write[poll[0]][poll[1] - 1].equals(".")) { data.offer(new int[] {poll[0], poll[1] - 1, poll[2] + 1}); write[poll[0]][poll[1] - 1] = "/"; } } return -1; } }