采用搜索算法,如果找到一个位置为1,就将此位置修改为0,再去遍历它上下左右的点,若也为1,则修改为0,这就能保证进行一次搜索后与该位置相邻的所以点都变为0,再进行计数则可。代码如下所示:
class Solution {
public:
int numIslands(vector<vector<char>>& grid) {
int r = grid.size();
int c = grid[0].size();
int cnt = 0;
for(int i=0; i<r; i++)
for(int j=0; j<c; j++){
if(grid[i][j] == '1'){
DFS(grid,i,j);
cnt++;
}
}
return cnt;
}
void DFS(vector<vector<char>>& grid, int row, int col){
int r = grid.size();
int c = grid[0].size();
grid[row][col] = '0';
if(row-1 >= 0 && grid[row-1][col] == '1')DFS(grid, row-1, col);
if(col+1 < c && grid[row][col+1] == '1')DFS(grid, row, col+1);
if(row+1 < r && grid[row+1][col] == '1')DFS(grid, row+1, col);
if(col-1 >= 0 && grid[row][col-1] == '1')DFS(grid, row, col-1);
}
};