Given a non-empty 2D array grid of 0’s and 1’s, an island is a group of 1’s (representing land) connected 4-directionally (horizontal or vertical.) You may assume all four edges of the grid are surrounded by water.
Find the maximum area of an island in the given 2D array. (If there is no island, the maximum area is 0.)
Example 1:
[[0,0,1,0,0,0,0,1,0,0,0,0,0],
[0,0,0,0,0,0,0,1,1,1,0,0,0],
[0,1,1,0,1,0,0,0,0,0,0,0,0],
[0,1,0,0,1,1,0,0,1,0,1,0,0],
[0,1,0,0,1,1,0,0,1,1,1,0,0],
[0,0,0,0,0,0,0,0,0,0,1,0,0],
[0,0,0,0,0,0,0,1,1,1,0,0,0],
[0,0,0,0,0,0,0,1,1,0,0,0,0]]
给一个数组,求4邻域方向连接的1的最大个数
思路:
DFS,访问过的置true,后面不再访问,深度搜索4邻域内1的个数,注意出边界时直接返回个数0
public int maxAreaOfIsland(int[][] grid) {
if(grid == null || grid.length == 0) {
return 0;
}
int m = grid.length;
int n = grid[0].length;
boolean[][] visited = new boolean[m][n];
int count = 0;
int result = 0;
for(int i = 0; i < m; i++) {
for(int j = 0; j < n; j++) {
count = dfs(grid, visited, i, j, m, n);
result = Math.max(result, count);
}
}
return result;
}
int dfs(int[][] grid, boolean[][] visited, int r, int c, int m, int n) {
if(r < 0 || c < 0 || r >= m || c >= n) {
return 0;
}
if(grid[r][c] == 0 || visited[r][c]) {
return 0;
}
int count = 1;
visited[r][c] = true;
count += dfs(grid, visited, r-1, c, m, n);
count += dfs(grid, visited, r, c-1, m, n);
count += dfs(grid, visited, r, c+1, m, n);
count += dfs(grid, visited, r+1, c, m, n);
return count;
}
这篇博客介绍了如何使用深度优先搜索(DFS)算法来解决一个二维数组中找到最大岛屿面积的问题。岛屿是由1(陆地)组成并以4个方向相邻的群体,数组的边界被水包围。在给定的示例输入数组中,算法遍历每个元素,通过DFS计算每个1所在岛屿的面积,并记录最大面积。最后返回这个最大面积。

被折叠的 条评论
为什么被折叠?



