深度优先dfs。遍历矩阵,从矩阵中的每个位置开始dfs周围是'1'的位置,dfs的同时修改'1'为'0'作为标记。思路在于每次走遍一块陆地,并将这一块陆地修改为海洋。
class Solution {
public:
/**
* 判断岛屿数量
* @param grid char字符型vector<vector<>>
* @return int整型
*/
struct Pos{
int dx;
int dy;
};
vector<Pos> dir{{-1,0},{0,1},{1,0},{0,-1}};
void dfs(vector<vector<char>>& grid,int x,int y){
int m=grid.size();
int n=grid[0].size();
if(x<0 || y<0 || x>=m || y>=n || grid[x][y]=='0') return;
grid[x][y]='0';
for(int i=0;i<dir.size();i++){
int next_x=x+dir[i].dx;
int next_y=y+dir[i].dy;
dfs(grid,next_x,next_y);
}
}
int solve(vector<vector<char> >& grid) {
int m=grid.size();
int n=grid[0].size();
if(m==0 || n==0) return 0;
int cont=0;
for(int x=0;x<m;x++){
for(int y=0;y<n;y++){
if(grid[x][y]=='1'){
cont++;
dfs(grid,x,y);
}
}
}
return cont;
}
};