岛屿的最大面积
给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合。你可以假设二维矩阵的四个边缘都被水包围着。
找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为0。)
示例 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]]
思路+代码+注释:
public int maxAreaOfIsland(int[][] grid) {
/*
思路:遍历数组元素,如果数组元素是1,那么进行广度优先搜索,记录搜索路径的长度,搜索过的节点设置为0避免重复搜索
*/
int n=grid.length;
int m=grid[0].length;
int res=0;
Queue<String> queue=new LinkedList<>();
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
int len=0;
int num=grid[i][j];
if (num==1)
{
queue.add(i+","+j);
grid[i][j]=0;
}
while (queue.size()>0)
{
String zuoBiao=((LinkedList<String>) queue).pop();
String[] strs=zuoBiao.split(",");
int row=Integer.parseInt(strs[0]);
int col=Integer.parseInt(strs[1]);
//上
if (row>0)
{
if (grid[row-1][col]==1)
{
queue.add((row-1)+","+col);
grid[row-1][col]=0;
}
}
//下
if (row<n-1)
{
if (grid[row+1][col]==1)
{
queue.add((row+1)+","+col);
grid[row+1][col]=0;
}
}
//左
if (col>0)
{
if (grid[row][col-1]==1)
{
queue.add((row)+","+(col-1));
grid[row][col-1]=0;
}
}
//右
if (col<m-1)
{
if (grid[row][col+1]==1)
{
queue.add(row+","+(col+1));
grid[row][col+1]=0;
}
}
len++;
}
if (res<len)
{
res=len;
}
}
}
return res;
}