思路
深度优先搜索是一种递归的搜索算法,其核心思想是从一个节点开始,沿着一条路径尽可能深地探索下去,直到无法继续,然后回溯到上一个节点,继续探索其他路径。在本题中,我们可以将二维网格中的每一个 ‘1’(陆地)看作一个节点,通过 DFS 算法将与该节点相连的所有陆地都标记为已访问,这样就可以将一个岛屿整体处理。通过遍历整个二维网格,每当遇到一个未被访问的陆地时,就进行一次 DFS 搜索,每进行一次 DFS 搜索就意味着发现了一个新的岛屿,最终统计 DFS 搜索的次数即可得到岛屿的数量。
解答
class Solution {
public:int rows;int cols;void dfs(vector<vector<char>>& grid, int i, int j){// cout << "i="<<i<<", rows="<<this->rows<<", j="<<j<<", cols="<<this->cols<<endl;if (i<0 || i>=this->rows || j<0 || j>=this->cols) return;if (grid[i][j] == '0') return;grid[i][j] = '0';dfs(grid,i+1,j);dfs(grid,i-1,j);dfs(grid,i,j-1);dfs(grid,i, j+1);}int numIslands(vector<vector<char>>& grid) {int ans = 0;this->rows = grid.size();this->cols = grid[0].size();for (int i=0; i<rows; ++i){for (int j=0; j<cols; ++j){if (grid[i][j] == '1'){dfs(grid, i, j);ans +=1;} }}return ans;}
};