力扣 200. 岛屿数量

65 阅读1分钟

🔗 leetcode.cn/problems/nu…

题目

  • 给一个 n * m 的网格,1 为陆地,0 为水,计算网格中的岛屿数量

思路

  • dfs 染色

代码

class Solution {
public:
    vector<vector<int> > dir;
    void dfs(int x, int y, vector<vector<char>>& grid) {
        int xx = grid.size(); 
        int yy = grid[0].size();
        if (x < 0 || x >= xx || y < 0 || y >= yy) return;
        if (grid[x][y] == '0') return;
        grid[x][y] = '0';
        for (int d = 0; d < dir.size(); d++) {
            dfs(x + dir[d][0], y + dir[d][1], grid);
        }
    }
    int numIslands(vector<vector<char>>& grid) {
        dir.push_back({-1, 0});
        dir.push_back({1, 0});
        dir.push_back({0, 1});
        dir.push_back({0, -1});
        int count = 0;
        for (int i = 0; i < grid.size(); i++) {
            for (int j = 0; j < grid[i].size(); j++) {
                if (grid[i][j] == '1') {
                    count++;
                    dfs(i, j, grid);
                }
            }
        }
        return count;
    }
};