一、题目
二、思路
1、遍历数组,找到’1’的值,传入dfs函数,然后数量+1(因为在dfs函数中,如果碰到为’1’,会直接把这个’1’变成其他字符,并且不会再变回来)
2、dfs函数中,先判断边界条件是否符合,判断是否为’1’;
3、进行dfs迭代
三、代码
class Solution {
public:
/**
* 判断岛屿数量
* @param grid char字符型vector<vector<>>
* @return int整型
*/
int solve(vector<vector<char> >& grid) {
if(grid.empty())
{
return 0;
}
int MaxNum=0;
for(int i=0;i<grid.size();++i)
{
for(int j=0;j<grid[i].size();++j)
{
if(grid[i][j]=='1')
{
//因为将访问过的已经变为其他符号的,所以这里找到的就是所有的岛屿
MaxNum++;
dfs(grid,i,j);
}
}
}
return MaxNum;
}
void dfs(vector<vector<char> >& grid,int left,int right)
{
if(left<0 || left>=grid.size() || right<0 || right>=grid[left].size())
{
return;
}
if(grid[left][right]!='1')
{
return;
}
//将访问过的变成其他元素,不变回来
grid[left][right]='#';
//先加个判断条件,是否越界
if(left+1<grid.size())
{
dfs(grid,left+1,right);
}
if(left-1>=0)
{
dfs(grid,left-1,right);
}
if(right+1<grid[left].size())
{
dfs(grid,left,right+1);
}
if(right-1>=0)
{
dfs(grid,left,right-1);
}
}
};