深度优先遍历DFS:
class Solution { public: /** * 判断岛屿数量 * @param grid char字符型vector<vector<>> * @return int整型 */ void dfs(int x, int y, vector<vector<char> > &grid, vector<vector<int> > & mark, int r, int c) { if (x < 0 || x >= r || y < 0 || y >= c || mark[x][y] == 0) return; //越界或已标记 if (grid[x][y] == '1') { mark[x][y] = 0; // 标记为0 // 向上下左右四个方向查找 dfs(x+1, y, grid, mark, r, c); dfs(x-1, y, grid, mark, r, c); dfs(x, y+1, grid, mark, r, c); dfs(x, y-1, grid, mark, r, c); } } int solve(vector<vector<char> >& grid) { // write code here if (grid.empty()) return 0; int r = grid.size(); int c = grid[0].size(); int count = 0; vector<vector<int> > mark(r, vector<int>(c,1)); // 记录是否遍历过 for (int i = 0; i < r; ++i) { for (int j = 0; j < c; ++j) { if (grid[i][j] == '1' && mark[i][j]) { dfs(i, j, grid, mark, r, c); count++; // 增加岛屿数 } } } return count; } };