题目:
695. 岛屿的最大面积
剑指 Offer II 105. 岛屿的最大面积
题解:深度优先搜索DFS
解题思路:
DFS(深度优先搜索):
- 遍历grid得到每个位置岛屿🏝面积的最大值,返回一个max
- 搜索函数-递归实现
- 判断边界,若不在边界内,返回0岛屿🏝;否则为1,递归计算上下左右是否为1,计数岛屿🏝的面积
- 判断完每个位置需要将其置为已访问(visited[i][j] = true)
- 此题不需要回溯
代码:深度优先搜索DFS
/**
* code695
*/
public class code695 {
public static int maxAreaOfIsland(int[][] grid) {
int maxArea = 0;
int area = 0;
int m = grid.length;
int n = grid[0].length;
boolean visited[][] = new boolean[m][n];
for(int i = 0; i < m; i++)
{
for(int j = 0; j < n; j++)
{
if(grid[i][j] == 1)
{
area = dfs(grid, i, j, m, n, visited);
if(area > maxArea)
{
maxArea = area;
}
}
}
}
return maxArea;
}
public static int dfs(int grid[][], int i, int j, int m, int n, boolean visited[][])
{
if(i < 0 || i >= m || j < 0 || j >= n || grid[i][j] != 1 || visited[i][j])
{
return 0;
}
visited[i][j] = true;
return dfs(grid, i + 1, j, m, n, visited) + dfs(grid, i - 1, j, m, n, visited) + dfs(grid, i, j + 1, m, n, visited) + dfs(grid, i, j - 1, m, n, visited) + 1;
}
public static void main(String[] args) {
int grid[][] = {
{1,1,0,0,0},
{1,1,0,0,0},
{0,0,0,1,1},
{0,0,0,1,1}
};
int res = maxAreaOfIsland(grid);
System.out.println(res);
}
}