描述
给一个01矩阵,1代表是陆地,0代表海洋, 如果两个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
(注:存储的01数据其实是字符'0','1')
核心代码
void dfs(vector<vector<char >>& grid,int row,int col){
grid[row][col]='0';
int m=grid.size();
int n=grid[0].size();
if(row+1<m&&'1'==grid[row+1][col]) dfs(grid,row+1,col);
if(col+1<n && '1'==grid[row][col+1]) dfs(grid,row,col+1);
if(row-1>=0 && '1'==grid[row-1][col]) dfs(grid,row-1,col);
if(col-1>=0 && '1'==grid[row][col-1]) dfs(grid,row,col-1);
}
int solve(vector<vector<char> >& grid) {
// write code here
int cnt=0;
int m=grid.size();
int n=grid[0].size();
//vector<bool> temp=vector<bool>(n,false);
//for(int i=0;i<m;++i) vis.push_back(temp);
for(int i=0;i<m;++i)
{
for(int j=0;j<n;++j)
{
if(grid[i][j]=='1')
{
++cnt;
dfs(grid,i,j);
}
}
}
return cnt;
}
Tip
标识grid[i][j]已被访问,可不用vis数组,只需将grid[i][j]标为'0'