描述
给一个01矩阵,求不同的岛屿的个数。
0代表海,1代表岛,如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。
样例
在矩阵:
[
[1, 1, 0, 0, 0],
[0, 1, 0, 0, 1],
[0, 0, 0, 1, 1],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 1]
]
中有 3
个岛.
解题思路:深度遍历 dfs
代码:
class Solution {
public:
/**
* @param grid a boolean 2D matrix
* @return an integer
*/
int step[4][2] = {{-1,0},{1,0},{0,-1},{0,1}};
int numIslands(vector<vector<bool>>& grid) {
// Write your code here
int n = grid.size();
if(n < 1) return 0;
int m = grid[0].size();
int count = 0;
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
if(grid[i][j] == true){
dfs(grid,i,j);
count++;
}
}
}
return count;
}
void dfs(vector<vector<bool>>& grid, int i, int j){
grid[i][j] = false;
for(int k = 0; k < 4; k++){
int x = step[k][0] + i;
int y = step[k][1] + j;
if(x >= 0 && x < grid.size() && y >= 0 && y < grid[0].size() && grid[x][y] == true){
dfs(grid,x,y);
}
}
return;
}
};