/*
* 给定一个包含了一些 0 和 1 的非空二维数组 grid 。
一个 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在水平或者竖直方向上相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。
找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为 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]]
对于上面这个给定矩阵应返回 6。注意答案不应该是 11 ,因为岛屿只能包含水平或垂直的四个方向的 1 。
示例 2:
[[0,0,0,0,0,0,0,0]]
对于上面这个给定的矩阵, 返回 0。
* */
#include <iostream>
#include <vector>
using namespace std;
int dfs(vector<vector<int>>& grid,int i,int j);
int maxAreaOfIsland(vector<vector<int>>& grid) {
if(grid.size()==0) return 0;
int res=0;
for(int i=0;i<grid.size();i++){
for(int j=0;j<grid[0].size();j++){
if(grid[i][j]==1){
int temp=dfs(grid,i,j);
res=max(res,temp);
}
}
}
return res;
}
int dfs(vector<vector<int>>& grid,int i,int j){
if(i<0 || i>=grid.size() || j < 0 || j >=grid[0].size()){
return 0;
}
if(grid[i][j]!=1){
return 0;
}
grid[i][j]=2;
return 1 +dfs(grid,i+1,j)
+dfs(grid,i-1,j)
+dfs(grid,i,j-1)
+dfs(grid,i,j+1);
}
int main() {
std::cout << "Hello, World!" << std::endl;
vector<vector<int>> grid={{1,1,0,0,0},{1,1,0,0,0},{0,0,0,1,1},{0,0,0,1,1}};
cout<< maxAreaOfIsland(grid);
return 0;
}
LeetCode--695岛屿最大面积
最新推荐文章于 2020-05-11 14:05:24 发布