思路:一个一个遍历数组,如果发现一块是陆地,就将和他相连的所有陆地全部置为0,然后count++,这样遍历完count的值就是岛屿的数量。
代码如下
class Solution {
public:
int numIslands(vector<vector<char>>& grid) {
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'){//如果是一就发现一个岛屿,然后把和他相连的岛屿全部置为0
dfs(grid,i,j);
res++;
}
}
}
return res;
}
void dfs(vector<vector<char>>& grid, int i,int j){
if( i<0 || i>=grid.size()|| j<0 || j>=grid[0].size()|| grid[i][j]=='0') return;
//要先判断数组是否越界,再判断值是否等于'0',否则会报错
grid[i][j]='0';
dfs(grid, i, j+1);
dfs(grid, i+1, j);
dfs(grid, i, j-1);
dfs(grid, i-1, j);
return;
}
};