我的思路:
- 采用深度优先搜索,把附近为1的全部进行标记。
- 对每一个格子遍历进行遍历,若为1且没被标记,则ret++
借鉴:
- 可以使用BFS,即标记附近的格子的时候采用bfs去遍历(若当前格子为1,则放入周围所有为1的格子,并标记)
- 可以采用并查集(没看)
class Solution {
public:
int numIslands(vector<vector<char>>& grid) {
ret=0;
row=grid.size();
if(row==0)
return ret;
col=grid[0].size();
if(col==0)
return 0;
used=vector<vector<bool>>(row,vector<bool>(col,false));
for(int i=0;i<row;i++)
for(int j=0;j<col;j++){
if(used[i][j]==false && grid[i][j]=='1'){
ret++;
getNum(grid,used,i,j);
}
}
return ret;
}
private:
vector<vector<bool>> used;
int ret,row,col;
void getNum(vector<vector<char>> &grid,vector<vector<bool>> &used,int x,int y){
if(x<0||x>=row||y<0||y>=col||grid[x][y]=='0')
return ;
if(grid[x][y]== '1' && used[x][y]==false){
used[x][y]=true;
getNum(grid,used,x+1,y);
getNum(grid,used,x-1,y);
getNum(grid,used,x,y+1);
getNum(grid,used,x,y-1);
}
};
};
网友评论