题目链接:695. 岛屿的最大面积 - 力扣(LeetCode)
bfs函数本质是搜索一个岛屿,因此可以利用bfs函数计算每一个岛屿的面积,取最大面积返回即可
class Solution {
public:
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
int m=0,n=0;//横纵坐标边界值
int ans=0;//最大岛屿面积
vector<vector<bool>> vis;
int maxAreaOfIsland(vector<vector<int>>& grid) {
m=grid.size();
n=grid[0].size();
vis.resize(m);
//初始化vis数组
for(int i=0;i<m;++i)
{
vis[i].resize(n);
for(int j=0;j<n;++j) vis[i][j]=false;
}
//广度优先搜索
for(int i=0;i<m;++i)
{
for(int j=0;j<n;++j)
{
if(grid[i][j]==1&&!vis[i][j])
{
//广度优先搜索
int ret=bfs(grid,i,j);
ans=max(ans,ret);
}
}
}
return ans;
}
//广度优先算法
int bfs(vector<vector<int>>& grid,int i,int j)
{
int ret=0;//岛屿面积
queue<pair<int ,int>> q;
q.push({i,j});
vis[i][j]=true;
while(q.size())
{
++ret;
int a=q.front().first;
int b=q.front().second;
q.pop();
for(int k=0;k<4;++k)
{
int x=a+dx[k];
int y=b+dy[k];
if(x>=0&&x<m&&y>=0&&y<n&&grid[x][y]==1&&!vis[x][y])
{
q.push({x,y});
vis[x][y]=true;
}
}
}
return ret;
}
};