Leetcode200. 岛屿数量(HOT100)

链接

代码:

cpp 复制代码
class Solution {
public:
    int dx[4] = {0,1,-1,0},dy[4] = {1,0,0,-1};
    vector<vector<char>> g;
    int numIslands(vector<vector<char>>& grid) {
        g = grid;
        int cnt = 0;
        for(int i = 0;i<g.size();i++){
            for(int j = 0;j<g[i].size();j++){//g[i].size() rather than g[0].size()
                if(g[i][j]=='1'){
                    dfs(i,j);
                    cnt++;
                }
            }
        }
        return cnt;
    }
    void dfs(int x,int y){//not int i,int y 否则会和内层for循环中的i冲突
        g[x][y] = '0';
        for(int i = 0;i<4;i++){
            int a = x+dx[i],b = y+dy[i];
            if(a>=0 && b>=0 
                    && a<g.size() && b<g[a].size() //not a<=g.size() && b<=g[i].size()
                    && g[a][b]=='1')//g[i].size() rather than g[0].size()
                dfs(a,b);
        }
    }
};

这是flood fill算法经典应用。但是写的时候还是漏洞百出。

遍历整个vector,遇到'0'跳过,遇到'1'则深入下去直接把包括这个'1'在内的往四个方向扩展的岛屿全部遍历完,并标记为'0'。这一趟下去表明发现了一个岛屿,我们在dfs之后cnt++。

在dfs中,我们先将当前位置标记,然后计算四个方向的坐标,坐标如果合法,我们便深入遍历,在下一层dfs中,将那个坐标标记为'0'........

相关推荐
avocado_green1 分钟前
【LeetCode】90. 子集 II
算法·leetcode
tankeven6 分钟前
HJ178 【模板】双指针
c++·算法
君义_noip16 分钟前
信息学奥赛一本通 4131:【GESP2506六级】学习小组 | 洛谷 P13015 [GESP202506 六级] 学习小组
算法·动态规划·gesp·信息学奥赛
6Hzlia1 小时前
【Hot 100 刷题计划】 LeetCode 72. 编辑距离 | C++ 经典 DP 增删改状态转移
c++·算法·leetcode
穿条秋裤到处跑1 小时前
每日一道leetcode(2026.04.16):距离最小相等元素查询
算法·leetcode·职场和发展
XY_墨莲伊2 小时前
【实战项目】基于B/S结构Flask+Folium技术的出租车轨迹可视化分析系统(文末含完整源代码)
开发语言·后端·python·算法·机器学习·flask
小雅痞2 小时前
[Java][Leetcode simple] 1. 两数之和
java·算法·leetcode
somi72 小时前
ARM-驱动-09-LCD FrameBuffer
arm开发·驱动开发·算法·自用
乐迪信息2 小时前
乐迪信息:智慧港口AI防爆摄像机实现船舶违规靠岸自动抓拍
大数据·人工智能·算法·安全·目标跟踪
winxp-pic2 小时前
图片校正软件 操作说明及算法介绍
算法