算法日常・每日刷题--<BFS>3

200. 岛屿数量 - 力扣(LeetCode)200. 岛屿数量 - 给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。 示例 1:输入:grid = \['1','1','1','1','0', '1','1','0','1','0', '1','1','0','0','0', '0','0','0','0','0']输出:1示例 2:输入:grid = \['1','1','0','0','0', '1','1','0','0','0', '0','0','1','0','0', '0','0','0','1','1']输出:3 提示: * m == grid.length * n == gridi.length * 1 <= m, n <= 300 * gridij 的值为 '0' 或 '1'https://leetcode.cn/problems/number-of-islands/

题目描述

给定一个由 01 组成的非空二维数组 grid,用来表示海洋岛屿地图。 一个岛屿是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在水平或者竖直方向上相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。 找到给定的二维数组中最大的岛屿面积 。如果没有岛屿,则返回面积为 0

连通规则:4 连通(上下左右),斜向不算相邻

解题思路

  1. 方向数组 dx、dy 枚举上下左右 4 个方向,简化坐标偏移代码;
  2. vis 访问标记数组,防止重复统计同一块陆地;
  3. 双重循环遍历网格每个格子:
    • 如果当前格子是陆地1且未访问,启动一次 BFS;
    • BFS 遍历整块连通岛屿,统计当前岛屿土地数量(面积);
cpp 复制代码
class Solution {
public:
int dx[4]={0,0,1,-1};
    int dy[4]={1,-1,0,0};

    bool vis[50][50];
    int m,n;
    int maxAreaOfIsland(vector<vector<int>>& grid) {
        m=grid.size();
        n=grid[0].size();
        int count=0,ret=0;
        for(int i=0;i<m;i++)
        {
            for(int j=0;j<n;j++)
            {
                if(grid[i][j]==1&&!vis[i][j])
                {
                    
                    count=bfs(grid,i,j);
                    if(count>=ret)
            ret=count;
                }
            }
            

        }
        return ret;
    }

    int bfs(vector<vector<int>>& grid,int i,int j)
    {
        queue<pair<int ,int>>q;
        q.push({i,j});
        vis[i][j]=true;
            int sum=0;

        while(q.size())
        {
            auto [a,b]=q.front();
            q.pop();
                sum++;

            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 sum;
    }
};
相关推荐
洛阳纸贵14 分钟前
MATLAB-matlab基础知识
学习·算法·matlab
落羽的落羽19 分钟前
【AI】快速理解AI应用的相关名词概念
linux·c++·人工智能·python·计算机网络·算法
Nil20836 分钟前
leetcode 17电话号码的字母组合
算法·leetcode·职场和发展
203号居民2 小时前
LeetCode hot 100 — 25. K 个一组翻转链表
算法·leetcode·链表
ocean21033 小时前
2025-2026年AI算法与模型研发面试高频知识点洞察
人工智能·算法·面试
Nil2083 小时前
leetcode 78子集
数据结构·算法·leetcode
en.en..4 小时前
Linux fork() 工作原理
数据结构·算法
地平线开发者5 小时前
bevformer算法模型详细解读
算法
liliangcsdn5 小时前
ICIR权重矩阵如何加权标准化为综合因子
算法
SDWAN_Cheap6 小时前
SD-WAN智能选路技术的算法与实现机制
算法·php·sdwan