一、题目
二、思路
1、遍历数组,找到值为1的,然后进行dfs递归
2、在dfs中,先判断边界,边界不符合的直接返回,临时岛屿面积TempS++;将访问过的涂黑
3、向上、向左、向右、向下迭代
4、在函数中,进行岛屿面积的实时比较,临时岛屿面积是引用传递,比较完后又置为0
三、代码
class Solution {
public:
int maxAreaOfIsland(vector<vector<int>>& grid) {
if(grid.empty())
{
return 0;
}
int MaxS=0;
int TempS=0;
for(int i=0;i<grid.size();++i)
{
for(int j=0;j<grid[i].size();++j)
{
if(grid[i][j]==1)
{
FindGrid(grid,i,j,TempS);
//对比找到最大的一个岛屿的面积
MaxS=MaxS>TempS?MaxS:TempS;
TempS=0;
}
}
}
return MaxS;
}
void FindGrid(vector<vector<int>>& grid,int left,int right,int &TempS)
{
if(left<0 || left>=grid.size() || right<0 || right>=grid[left].size())
{
return;
}
if(grid[left][right]!=1)
{
return;
}
TempS++;
//涂黑
grid[left][right]=2;
//递归
if(left+1<grid.size())
{
FindGrid(grid,left+1,right,TempS);
}
if(left-1>=0)
{
FindGrid(grid,left-1,right,TempS);
}
if(right+1<grid[left].size())
{
FindGrid(grid,left,right+1,TempS);
}
if(right-1>=0)
{
FindGrid(grid,left,right-1,TempS);
}
}
};