思路:深度优先搜索,两层循环遍历一遍grid,若该网格为1则进行深度优先搜索并将走过的结点的visit置1,记录连接分量的个数。
class Solution { public: void search(vector<vector<char>>& grid, int i, int j, vector<vector<int>>& visit){ visit[i][j] = 1; int d[][2] = {{-1,0}, {1,0}, {0,-1}, {0,1}}; for(auto& a:d){ int nx = a[0]+i, ny = a[1]+j; if(nx>=0 && nx<grid.size() && ny>=0 && ny<grid[0].size() && visit[nx][ny]==0 && grid[nx][ny]=='1') search(grid, nx, ny, visit); } } int numIslands(vector<vector<char>>& grid) { if(grid.empty() || grid[0].empty()) return 0; vector<vector<int>> visit(grid.size(), vector<int>(grid[0].size(), 0)); int res = 0; for(int i=0; i<grid.size(); ++i){ for(int j=0; j<grid[0].size(); ++j){ if(grid[i][j] == '1' && visit[i][j]==0){ search(grid, i, j, visit); res++; } } } return res; } };