题目描述
给一个01矩阵,1代表是陆地,0代表海洋, 如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。
岛屿: 相邻陆地可以组成一个岛屿(相邻:上下左右) 判断岛屿个数。
题解:
人傻了,调了半小时没调出来。。
难倒是不难
其实就是dfs然后标记附近的岛屿,如果附近所有岛屿都被标记了,就count++
然后看还有其他的岛屿,挺常规的
代码:
class Solution {
private:
int d[5]={
-1,0,1,0,-1};
public:
/** * 判断岛屿数量 * @param grid char字符型vector<vector<>> * @return int整型 */
void dfs(int x, int y, vector<vector<char> >& grid, vector<vector<bool>> &vis, int row, int col){
if(x<0||x>=row||y<0||y>=col||vis[x][y]==false) return;
if(grid[x][y]=='1'){
vis[x][y] = false;
for(int i=0;i<4;i++){
dfs(x+d[i],y+d[i+1],grid,vis,row,col);
}
}
}
int solve(vector<vector<char> >& grid) {
// write code here
if(grid.size()==0){
return 0;}
int row = grid.size();
int col = grid[0].size();
int count = 0;
vector<vector<bool>> vis(row,vector<bool>(col,true));
for(int i=0;i<row;i++){
for(int j=0;j<col;j++){
if(grid[i][j]=='1'&&vis[i][j]==true){
dfs(i,j,grid,vis,row,col);
count++;
}
}
}
return count;
}
};