给一个 01 矩阵,求不同的岛屿的个数。
0 代表海,1 代表岛,如果两个 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
样例 2:
输入:
[
[1,1]
]
输出:
1
思路:通过dfs,找到一个true后,将周围所有的true都转化为false,这样每当找到一个新的true,则为一个新的岛。
class Solution {
public:
/**
* @param grid: a boolean 2D matrix
* @return: an integer
*/
int m;
int n;
int numIslands(vector<vector<bool>> &grid) {
// write your code here
m=grid.size();
if(m==0) return 0;
n=grid[0].size();
if(n==0) return 0;
int result=0;
for (int i = 0; i < m; i++) {
/* code */
for (int j = 0; j < n; j++) {
/* code */
if(!grid[i][j]) continue;
result++;
dfs(grid,i,j);
}
}
return result;
}
void dfs(vector<vector<bool>> &grid,int i,int j)
{
if(i<0||i>=m||j<0||j>=n) return;
if(grid[i][j])
{
grid[i][j]=false;
dfs(grid,i-1,j);
dfs(grid,i+1,j);
dfs(grid,i,j-1);
dfs(grid,i,j+1);
}
}
};```