leetcode 岛屿数量 中等

 

 

对地图做一个 tag 标记,表示已经被遍历过。每当遇到一个为 1 且没有遍历过的岛屿,++ ans,然后 dfs 打 tag

class Solution {
public:
    int numIslands(vector<vector<char>>& grid) {
        if(grid.empty() || grid[0].empty()) return 0;
        tag.resize(grid.size());
        for(auto &item : tag) item.resize(grid[0].size(), false);
        int ans = 0;
        for(int i = 0; i < grid.size(); ++ i) {
            for(int j = 0; j < grid[0].size(); ++ j) {
                if(!tag[i][j] && grid[i][j] == '1') {
                    ++ ans;
                    solve(grid, i, j);
                }
            }
        }
        return ans;
    }

private:
    vector<vector<bool>> tag;
    int to[4][2] = {0, 1, 0, -1, 1, 0, -1, 0};
    void solve(vector<vector<char>>& grid, int x, int y) {
        if(x < 0 || x >= tag.size() || y < 0 || y >= tag[0].size() || grid[x][y] == '0') return ;
        if(tag[x][y]) return ;
        tag[x][y] = true;
        for(int i = 0; i < 4; ++ i) {
            solve(grid, x + to[i][0], y + to[i][1]);
        }
    }
};

 

posted @ 2021-08-16 22:16  rookie_Acmer  阅读(25)  评论(0)    收藏  举报