LeetCode 695. 岛屿的最大面积 广度优先搜索

LeetCode 695. 岛屿的最大面积 广度优先搜索

1.题目

给你一个大小为 m x n 的二进制矩阵 grid 。

岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。

岛屿的面积是岛上值为 1 的单元格的数目。

计算并返回 grid 中最大的岛屿面积。如果没有岛屿,则返回面积为 0 。

2.思路

此题同200. 岛屿数量的思路一致,对于图中的每个点,如果为 1,则代表是一个岛屿,此时通过广度优先搜索,遍历此点四个方向相连接的所有的“陆地”。遍历过程中,我们使用一个同图相同大小的矩阵存储元素的访问状态,在遍历时跳过以及访问过的点。

遍历时,如果某个点为‘1’,且未被访问过,代表着这个点是一个新的岛屿,在进行bfs计算面积,每次有一个点加入,面积加1.

3.Code

class Solution {
public:
    vector<vector<int>> visited;
    int res;
    int row;
    int col;
    int maxAreaOfIsland(vector<vector<int>>& grid) {
        row=grid.size();
        col=grid[0].size();
        vector<vector<int>> vis(row,vector<int>(col,0));
        visited=vis;
        for(int i=0;i<row;i++){
            for(int j=0;j<col;j++){
                if(visited[i][j]!=1 && grid[i][j]==1){
                    res=max(bfs(i,j,grid),res);
                }
            }
        }
        return res;
    }
    int bfs(int i,int j,vector<vector<int>>& grid){
        int cur=1;
        visited[i][j]=1;
        //下
        if(i<row-1 && grid[i+1][j]==1 && visited[i+1][j]==0){
            cur+=bfs(i+1,j,grid);
        }
        //上
        if(i>0 && grid[i-1][j]==1 && visited[i-1][j]==0){
            cur+=bfs(i-1,j,grid);
        }
        //右
        if(j<col-1 && grid[i][j+1]==1 && visited[i][j+1]==0){
            cur+=bfs(i,j+1,grid);
        }
        //左
        if(j>0 && grid[i][j-1]==1 && visited[i][j-1]==0){
            cur+=bfs(i,j-1,grid);
        }
        return cur;
    }
};
posted @ 2021-11-10 18:37  流光之中  阅读(64)  评论(0编辑  收藏  举报