1代表土地,0代表水。【算最大面积只有上下左右相连,才算土地相连;斜着不算。】
岛屿的最大面积为橘红色部分,最大面积为6;
package com.pshdhx.Algorithm.middle;
/**
* @author pshdhx
* @date 2022-03-10 16:57
* @Des 获取岛屿的最大面积
*/
/**
* 不断向四周探索,一直探索到不能位置;深度有限搜索。使用递归。
*/
public class MaxArea {
public int maxAreaOfIsland(int[][] grid) {
int ans = 0;
for (int i = 0; i != grid.length; ++i) {
for (int j = 0; j != grid[0].length; ++j) {
ans = Math.max(ans, dfs(grid, i, j));
}
}
return ans;
}
public int dfs(int[][] grid, int cur_i, int cur_j) {
if (cur_i < 0 ||
cur_j < 0 ||
cur_i == grid.length ||
cur_j == grid[0].length ||
grid[cur_i][cur_j] != 1) {
return 0;
}
grid[cur_i][cur_j] = 0;//为了确保每个土地访问不超过一次,我们每次经过一块土地时,将这块土地的值置为 00。这样我们就不会多次访问同一土地。
int[] di = {0, 0, 1, -1}; //上下来看 (0,1)向右 (0,-1)向左 (1,0) 向上 (-1,0)向下
int[] dj = {1, -1, 0, 0}; //上下来看
int ans = 1;//因为grid[i,j]肯定==1
for (int index = 0; index != 4; ++index) { //向四个方向累加ans
int next_i = cur_i + di[index];
int next_j = cur_j + dj[index];
ans += dfs(grid, next_i, next_j);
}
return ans;
}
}
算法笔记和代码:gitee