当前位置: 首页 > news >正文

LeetCode HOT100系列题解之岛屿数量(10/100)

 题目:200. 岛屿数量 - 力扣(LeetCode)

题解:是一个非常裸的Floodfill问题来求解连通块个数,那么可以想到使用DFS或者BFS来遍历解决。当该点为1时,即对上下左右四个位置遍历,直到周围全为‘0’点。

class Solution {
public:
    const int dir[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
    void bfs(vector<vector<char>>& grid,int x, int y, const int n, const int m)
    {
        queue<pair<int,int>> q;
        q.push({x, y});
        while(q.size())
        {
            auto t = q.front();
            q.pop();

            for(int i = 0; i < 4; i ++)
            {
                int x = t.first + dir[i][0];
                int y = t.second + dir[i][1];
                if(x < 0 || x >= n || y < 0 || y >= m) continue;
                if(grid[x][y] == '0') continue;
                grid[x][y] = '0';
                q.push({x, y});
            }
        }
      
    }
    int numIslands(vector<vector<char>>& grid) {
        vector<vector<int>> directions = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
        const int n = grid.size();
        const int m = grid[0].size();
        int ans = 0;
    
        for(int i = 0; i < n; i ++)
            for(int j = 0; j < m; j ++)
                if(grid[i][j] == '1')
                {
                    bfs(grid, i, j,n, m);
                    ans ++;
                }
        return ans;
    }
};

相关文章:

  • 【Keil5-开发技巧】
  • VSCode 生成HTML 基本骨架
  • 【CICD】Ansible知识库
  • 【MySQL数据库】触发器与事件
  • 从失衡到平衡:手撕 AVL 树的插入旋转操作
  • Cursor 一键自动无限续杯(3月24日)亲测有效
  • 黑马点评-UV统计
  • 2025前端面试题记录
  • 23种设计模式-创建型模式-工厂方法
  • 【USTC 计算机网络】第三章:传输层 - 传输层概述及其服务、多路复用与解复用、无连接传输:UDP
  • Python 集合操作大全:从入门到精通,新手学习避坑指南
  • Web PKI技术基础知识
  • 小蓝的操作————(java)差分数组
  • Linux冯诺依曼体系与计算机系统架构认知(8)
  • 【Python】装饰器相关知识点
  • 20届智能车赛规则已完成搜索
  • spring-security原理与应用系列:建造者
  • AI Agent开发大全第七课-个人如何申请到靠谱的AI
  • git日常学习
  • 五、重学C++—类(封装继承)
  • 广西隆林突发山洪,致3人遇难1人失联
  • 新时代,新方志:2025上海地方志论坛暨理论研讨会举办
  • 阳光保险拟设立私募证券投资基金,总规模200亿元
  • 商务部召开全国离境退税工作推进会:提高退税商店覆盖面,扩大入境消费
  • 奥古斯都时代的历史学家李维
  • 现场丨在胡适施蛰存等手札与文献间,再看百年光华