给你一个由 '1'
(陆地)和 '0'
(水)组成的的二维网格,请你计算网格中岛屿的数量。
岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。
此外,你可以假设该网格的四条边均被水包围。
示例 1:
输入: 11110 11010 11000 00000 输出: 1
示例 2:
输入: 11000 11000 00100 00011 输出: 3 解释: 每座岛屿只能由水平和/或竖直方向上相邻的陆地连接而成。
class Solution {
public:
int numIslands(vector<vector<char>>& grid) {
if(grid.empty() ||grid[0].empty()) return 0; // 如果为空的话就输出0;
int result =0;
int n = grid.size(); // 得到格子的大小
int m = grid[0].size();// 返回其大小
for(int i =0; i<n;i++){
for (int j=0;j<m;j++){
if(grid[i][j] =='1'){
result ++; // 如果为1 的话 result +1;
dfs(grid,i,j);
}
}
}
return result;
}
void dfs (vector<vector<char>>& grid, int x,int y){
int dx[4] = {-1,0,1,0}; // 在这里的话我们首先遍历四个方向
int dy[4] = {0,1,0,-1}; // 上 右下左的顺序
grid[x][y] = '0';
for(int i=0; i<4;i++){
int a = x + dx[i]; // 计算周围的邻域的坐标值
int b = y + dy[i];
if(a>=0 && a<grid.size() && b>=0 && b<grid[0].size() && grid[a][b] =='1'){ // 进行一下边界的判断, 并且还得满足 grid[a][b] =='1'...
dfs (grid,a,b); // 进行dfs 遍历
}
}
}
};
// 加油,加油。。。 Try to make yourself more excellent...