題目:
題解:
- dfs
- 把200. 島嶼數量、1254. 統計封閉島嶼的數目這兩個題目好好做做,你就會發現同樣的套路了。
代碼如下:
class Solution {
public:
int maxAreaOfIsland(vector<vector<int>>& grid) {
int res=0;
int m=grid.size(),n=grid[0].size();
for(int i=0;i<m;++i){
for(int j=0;j<n;++j){
if(grid[i][j]==1){
int val=0;
dfs(grid,i,j,val,m,n);
res=max(res,val);
}
}
}
return res;
}
void dfs(vector<vector<int>>& grid,int i,int j,int& val,int m,int n){
if(!grid[i][j])return;
//將已記錄的島嶼1改爲水0,直到圖中沒有相鄰的島嶼時一個dfs退出,表示一塊島嶼面積已經計算得出
//最後直到島嶼的1全部變爲水0時,所有dfs退出,表示我們已經得到最大島嶼數了
grid[i][j]=0;
val++;
if(i-1>=0)dfs(grid,i-1,j,val,m,n);
if(i+1<m)dfs(grid,i+1,j,val,m,n);
if(j-1>=0)dfs(grid,i,j-1,val,m,n);
if(j+1<n)dfs(grid,i,j+1,val,m,n);
}
};