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;
}
};

本文介绍了一种计算二维网格中岛屿数量的方法。通过深度优先搜索(DFS)遍历网格,标记已访问过的陆地,并计算连通分量的数量。避免了边界条件下的越界访问错误,确保了算法的正确性和效率。
964

被折叠的 条评论
为什么被折叠?



