题目描述
给一个01矩阵,1代表是陆地,0代表海洋, 如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。
岛屿: 相邻陆地可以组成一个岛屿(相邻:上下左右) 判断岛屿个数。
示例1
输入
[[1,1,0,0,0],[0,1,0,1,1],[0,0,0,1,1],[0,0,0,0,0],[0,0,1,1,1]]
返回值
3
1、考察:类似城堡问题,遍历所有点
2、更改grid[i][j]的值,来表示是否被访问过
class Solution {
public:
/**
* 判断岛屿数量
* @param grid char字符型vector<vector<>>
* @return int整型
*/
int solve(vector<vector<char> >& grid) {
// write code here
int row=grid.size();
int col=grid[0].size();
int isnum=0;
for(int i=0;i<row;++i)
for(int j=0;j<col;++j){
if(grid[i][j]=='1'){ //找到了新点
++isnum;
dfs(grid,i,j);
}
}
return isnum;
}
void dfs(vector<vector<char> >& grid, int i, int j)
{
grid[i][j]='0';
if(i-1>=0 && grid[i-1][j]=='1') //向上走
dfs(grid,i-1,j);
if(i+1<grid.size() && grid[i+1][j]=='1') //向下走
dfs(grid,i+1,j);
if(j-1>=0 && grid[i][j-1]=='1') //向左走
dfs(grid,i,j-1);
if(j+1<grid[0].size() && grid[i][j+1]=='1') //向右走
dfs(grid,i,j+1);
}
};