这段代码 #2 和 #10 MLE 了........ 但是这个数据规模不应该啊....
import java.awt.*;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Main {
static int n;
static int m;
static char[][] g ;
static Queue<Point> queue = new LinkedList<>();
static int[] dx = {0, 1, 0, -1};
static int[] dy = {1, 0, -1, 0};
static int[][] distance ;
static boolean bfs(int x1, int y1, int x2, int y2) {
queue.add(new Point(x1, y1));
distance[x1][y1] = 0;
while (!queue.isEmpty()) {
Point temp = queue.remove();
for (int i = 0; i < 4; i++) {
int a = temp.x + dx[i];
int b = temp.y + dy[i];
if (a < 1 || b < 1 || a > n || b > m) continue;
if (distance[a][b] != 0) continue;
if (g[a][b] == '#') continue;
queue.add(new Point(a, b));
distance[a][b] = distance[temp.x][temp.y] + 1;
if (a == x2 && b == y2) return true;
}
}
return false;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
m = sc.nextInt();
distance = new int[n+2][m+2];
g= new char[n+2][m+2];
int x1 = 0;
int y1 = 0;
int x2 = 10;
int y2 = 0;
for (int i = 1; i <= n; i++) {
String s = sc.next();
for (int j = 1; j <= m; j++) {
g[i][j] = s.charAt(j - 1);
if (g[i][j] == 'm') {
x1 = i;
y1 = j;
}
if (g[i][j] == 'd') {
x2 = i;
y2 = j;
}
}
}
if (bfs(x1, y1, x2, y2))
System.out.println(distance[x2][y2]);
else System.out.println("No Way!");
}
}