【LeetCode】200. Number of Islands

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/KID_LWC/article/details/82804443

Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is surrounded by water and is formed by connecting adjacent lands horizontally or vertically. You may assume all four edges of the grid are all surrounded by water.

Example 1:

Input:
11110
11010
11000
00000

Output: 1

Example 2:

Input:
11000
11000
00100
00011

Output: 3

题解:求岛个数,只有上下左右四个方向才算联通的岛,直接对图作dfs即可求出连通分量个数。这里注意输入是邻接表所以访问不是N*N,另一方面第一次提交错误提示reference binding to null pointer of type ‘value_type,实际上自己越界错误,这里的错误是一下代码

if(grid[i][j]==0||i<0||j>grid.size()||i>grid.size()||j<0)

因为if里grid[i][j]先访问有可能此时i,j已经越界,所以应该先判断ij是否越界再判断点

class Solution {
    
    bool dfs(vector<vector<char>>& grid,int i,int j){
        if(i<0||i>=grid.size()||j>=grid[i].size()||j<0||grid[i][j]=='0') return false;
        grid[i][j]='0';
        dfs(grid,i-1,j);
        dfs(grid,i,j+1);
        dfs(grid,i+1,j);
        dfs(grid,i,j-1);
        return true;
    }
public:
    int numIslands(vector<vector<char>>& grid) {
        int ans=0;
        for(int i=0;i<grid.size();i++)
        for(int j=0;j<grid[i].size();j++){
            if(dfs(grid,i,j)) ans++;
        }
        return ans;
    }
    
};

猜你喜欢

转载自blog.csdn.net/KID_LWC/article/details/82804443