和昨天的题对比一下。
1 昨天的题是给点了坐标求包括该点在内的最大的“岛屿”,而本题只给出矩阵,需要在整个矩阵中搜索最大的一个岛屿。
2 昨天的题是在原来的矩阵上做修改,修改完一次后该点就不会再被选中。但本题需要计数,就可能把一个点多次计算。
int dfs(vector<vector<int>>& grid,int i,int j)
{
if(i<0||j<0||i>=grid.size()||j>=grid[0].size()||grid[i][j]==0)
return 0; //边界条件
grid[i][j]=0; //把原来为1的点化成0,防止多次计算
int count=1;
count+=dfs(grid,i+1,j); //dfs上下左右
count+=dfs(grid,i,j+1);
count+=dfs(grid,i-1,j);
count+=dfs(grid,i,j-1);
return count;
}
int maxAreaOfIsland(vector<vector<int>>& grid) {
int Max=0;
for(int i=0 ; i<grid.size();i++) //遍历整个矩阵
{
for(int j=0 ; j<grid[0].size();j++)
{
Max=max(Max,dfs(grid,i,j)); //找最大值
}
}
return Max;
}