[LeetCode] 695、岛屿的最大面积

题目描述

给定一个包含了一些 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;
};
发布了390 篇原创文章 · 获赞 576 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/ft_sunshine/article/details/103821101
今日推荐