题目:在一个二维坐标中,每个点是字符1或0组成,求出这个表中的岛屿的数量(连起来的1(上下左右有1为连通)一块叫做一个岛屿)
思路:
这道题主要是考察遍历图时,边遍历边记录。方法,从第一个点开始,如果这个点为字符 1 ,那就进入深度遍历,将他的上下左右所有的为 字符 1 的节点设置为字符0,表示走过了。同时count+1记录。
两个点,字符即使为0也是为真true的,不能通过==true来判断。
只有在外面遍历到为 字符 1才进行++,然后去子函数修改这一块岛屿
代码:
class Solution {
private:
int rows,cols;
public:
int numIslands(vector<vector<char>>& grid) {
if(grid.size()==0)
return 0;
rows=grid.size();
cols=grid[0].size();
int count=0;
for(int i= 0;i<rows;++i)
for(int j=0;j<cols;++j)
{
if(grid[i][j]=='1')
{
dfsmarking(grid,i,j);
count++;
//这个要在判断里面,否则遍历到1的上面的0时会改变
}
}
return count;
}
void dfsmarking(vector<vector<char>>& grid,int i,int j)
{
if(i<0 ||j<0 ||i>=rows || j>=cols || grid[i][j]!='1' )return ;
grid[i][j]='0';
dfsmarking(grid,i-1,j);
dfsmarking(grid,i+1,j);
dfsmarking(grid,i,j-1);
dfsmarking(grid,i,j+1);
}
};