给定一个包含了一些 0 和 1 的非空二维数组 grid 。
一个 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在水平或者竖直方向上相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。
找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为 0 。)
链接:https://leetcode-cn.com/problems/max-area-of-island
本题可以利用深度优先遍历进行解决,但在遍历过程中,它需要向四个方向进行拓展,因此可能会对数过的小格进行重复计数,为了避免这种情况,我们可以采用"沉岛法",即遍历过某个小格后将其沉没(即置0),因为这种方法会对输入进行修改,所以我们对输入进行一份拷贝后进行该操作。
int getArea(int[][] grid,int col,int rol){
int area=1;
if(col<0||col>=grid.length||rol<0||rol>=grid[0].length||grid[col][rol]==0)//当该岛无法扩散时退出
return 0;
grid[col][rol]=0;//沉岛
area+=getArea(grid,col,rol+1);
area+=getArea(grid,col,rol-1);
area+=getArea(grid,col+1,rol);
area+=getArea(grid,col-1,rol);
return area;
}
public int maxAreaOfIsland(int[][] grid) {
int rol=grid.length,col=grid[0].length;
int[][] copy=new int[grid.length][grid[0].length];
for(int i=0;i<rol;i++)
for(int j=0;j<col;j++)
{
copy[i][j]=grid[i][j];
}
int ans=0;
for(int i=0;i<rol;i++)
for(int j=0;j<col;j++)
{
if(copy[i][j]!=0)
ans=Math.max(getArea(copy,i,j),ans);
}
return ans;
}