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]); } } };

浙公网安备 33010602011771号