class Solution {
public int maxDistance(int[][] grid) {
Queue<Node> queue = new LinkedList<>();
// 把首节点放进去: 所有的1
for (int i = 0; i < grid.length; i++) {
for (int j = 0; j < grid[0].length; j++) {
if (grid[i][j] == 1) {
queue.offer(new Node(i, j, 0));
}
}
}
// 开始搜索
int max = -1;
int[] dx = {-1, 1, 0, 0};
int[] dy = {0, 0, -1, 1};
while (!queue.isEmpty()) {
Node node = queue.poll();
for (int i = 0; i < 4; i++) {
int X = node.x + dx[i];
int Y = node.y + dy[i];
if (X < 0 || X >= grid.length || Y < 0 || Y >= grid[0].length) {
continue;
}
if (grid[X][Y] == 0) {
queue.offer(new Node(X, Y, node.length + 1));
max = Math.max(max, node.length + 1);
grid[X][Y] = 1; // 表示这个位置已经遍历过了 (意思是这个点已经找过最近的陆地了)
}
}
}
return max;
}
// 定义节点
class Node {
int x, y, length;
String start;
Node(int x, int y, int length) {
this.x = x;
this.y = y;
this.length = length;
}
Node() {}
}
}
第一次用比较优的解做medium。。