解决岛屿类问题(网格)通用解法DFS(附题)_暮色_年华的博客-CSDN博客
leetcode695:
给你一个大小为 m x n 的二进制矩阵 grid 。
岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。
岛屿的面积是岛上值为 1 的单元格的数目。
计算并返回 grid 中最大的岛屿面积。如果没有岛屿,则返回面积为 0 。
套用dfs模块:
dfs(x,y):if(not valid)return
标记x,y
dfs(x+1,y);
dfs(x-1,y);
dfs(x,y+1);
dfs(x,y-1);
class Solution {
public:
vector<vector<int>>G;
int res;
int area;
int n,m;
void dfs(int x,int y){
if(!(x>=0&&y>=0&&x<n&&y<m))return;
if(G[x][y]==0)return;
G[x][y]=0;
area++;
dfs(x+1,y);
dfs(x-1,y);
dfs(x,y+1);
dfs(x,y-1);
}
void solve(){
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(G[i][j]==1){
area=0;
dfs(i,j);
res=max(res,area);
}
}
}
}
int maxAreaOfIsland(vector<vector<int>>& grid) {
G=grid;
res=0;
n=grid.size();
m=grid[0].size();
solve();
return res;
}
};