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;
}
};