解答
java
class Solution {
public int findMaxFish(int[][] grid) {
int maxCount = Integer.MIN_VALUE;
int m = grid.length;
int n = grid[0].length;
for (int i = 0; i < m; ++i) {
for (int j = 0; j < n; ++j) {
int value = grid[i][j];
if (value == 0) {
continue;
}
int count = bfs(grid, i, j);
maxCount = Math.max(maxCount, count);
}
}
return maxCount == Integer.MIN_VALUE ? 0 : maxCount;
}
int bfs(int[][] grid, int row, int column) {
int m = grid.length;
int n = grid[0].length;
int count = 0;
LinkedList<int[]> queue = new LinkedList<>();
queue.add(new int[]{row, column});
while (!queue.isEmpty()) {
int[] position = queue.removeFirst();
int r = position[0];
int c = position[1];
if (r < 0 || r >= m || c < 0 || c >= n) {
continue;
}
int value = grid[r][c];
if (value == 0) {
continue;
}
count += value;
grid[r][c] = 0;
queue.add(new int[]{r, c + 1});
queue.add(new int[]{r, c - 1});
queue.add(new int[]{r + 1, c});
queue.add(new int[]{r - 1, c});
}
return count;
}
}
总结
使用广度优先算法,遍历地图。