LeetCode 200 岛屿数量[DFS] HERODING的LeetCode之路

Posted HERODING23

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 200 岛屿数量[DFS] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。

在这里插入图片描述解题思路:
岛屿数量也算是比较经典的DFS题目了,仔细观察问题可以发现,这道题目求解的其实是连通图数量,不同的岛屿属于不同的连通图,那么思路就清晰了, 当遍历到其中一个岛屿时,把这个岛屿给淹了(全部变成0),遇到水都跳过,那么当遍历到另一个陆地时,就是另一个岛屿,执行同样的操作,如此进行直到所有的陆地全部被淹,代码如下:

class Solution {
private:
    // 定义方向和网络的长宽
    int direction[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
    int m, n;
public:
    int numIslands(vector<vector<char>>& grid) {
        // 如果大小为0
        if(grid.size() == 0) {
            return 0;
        }
        // 计算长宽
        m = grid.size();
        n = grid[0].size();
        // 统计数量
        int count = 0;
        for(int i = 0; i < m; i ++) {
            for(int j = 0; j < n; j ++) {
                if(grid[i][j] == '0') {
                    continue;
                } else {
                    count ++;
                    dfs(grid, i, j);
                }
            }
        }
        return count;
    }

    void dfs(vector<vector<char>>& grid, int i, int j) {
        // 如果越界或者是水的情况
        if(i < 0 || i >= m || j < 0 || j >= n || grid[i][j] == '0') {
            return;
        }
        grid[i][j] = '0';
        // 遍历四个方向深搜
        for(auto& d : direction) {
            dfs(grid, i + d[0], j + d[1]);
        }
    }
};


/*作者:heroding
链接:https://leetcode-cn.com/problems/number-of-islands/solution/c-dfs-by-heroding-4jlj/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。*/

以上是关于LeetCode 200 岛屿数量[DFS] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode No.200 岛屿数量(DFS)

leetcode 200. 岛屿数量(dfs||bfs)

Leetcode 200.岛屿的数量 - DFSBFS

LeetCode树系列——200题岛屿数量

leetcode-200-岛屿的个数(dfs找所有的连通分量)

LeetCode Java刷题笔记—200. 岛屿数量