题目描述
给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合。你可以假设二维矩阵的四个边缘都被水包围着。
找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为0。)
[[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
参考代码
常规dfs题目
class Solution {
public:
int maxAreaOfIsland(vector<vector<int> >& grid) {
rows = grid.size();
if(rows == 0)
return 0;
cols = grid[0].size();
maxArea = 0;
for(int i = 0; i < rows; i++){
for(int j = 0; j < cols; j++){
if(grid[i][j] == 1){
int val = 0;
dfs(grid, i, j, val);
maxArea = max(maxArea, val);
}
}
}
return maxArea;
}
void dfs(vector<vector<int> >& grid, int row, int col, int &val){
if(row < 0 || row >= rows || col < 0 || col >= cols || grid[row][col] != 1)
return;
val++;
grid[row][col] = 0;
int dx[] = {0, 1, 0, -1};
int dy[] = {1, 0, -1, 0};
for(int i = 0; i < 4; i++){
int new_row = row + dx[i];
int new_col = col + dy[i];
dfs(grid, new_row, new_col, val);
}
}
private:
int rows, cols;
int maxArea;
};