牛客题霸 [ 岛屿数量] C++题解/答案

题目描述

给一个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;
    }
};