C++ 我在运行代码时出错

C++ 我在运行代码时出错,c++,vector,C++,Vector,这是Leetcode 200。问题陈述是: 给定“1”(陆地)和“0”(水)的二维栅格地图,计算岛屿的数量。岛屿被水包围,通过水平或垂直连接相邻的陆地而形成。您可以假设网格的所有四条边都被水包围 11110 11010 11000 00000 产出:1 在试图解决这个问题时,我发现了一个错误 引用绑定到类型为“std::vector>”的空指针(stl_vector.h) 我得到了一些输入的正确答案,但总的来说,当我提交时,我得到了上面的错误。如果有人能帮助我,我将不胜感激 class Sol

这是Leetcode 200。问题陈述是: 给定“1”(陆地)和“0”(水)的二维栅格地图,计算岛屿的数量。岛屿被水包围,通过水平或垂直连接相邻的陆地而形成。您可以假设网格的所有四条边都被水包围

11110
11010
11000
00000
产出:1

在试图解决这个问题时,我发现了一个错误 引用绑定到类型为“std::vector>”的空指针(stl_vector.h)

我得到了一些输入的正确答案,但总的来说,当我提交时,我得到了上面的错误。如果有人能帮助我,我将不胜感激

class Solution {
public:
    int numIslands(vector<vector<char>>& grid) {
        int count=0;
        int n=grid.size();
        int m=grid[0].size();
        if(grid.size()==0 || grid[0].size()==0)
            return 0;
        bool left,right,top,bottum;
        for(int i=0;i<n;i++)
            for(int j=0;j<m;j++)
            {
                   if(grid[i][j]=='1')
                   {
                       count++;
                       BFS(grid,i,j);
                   }
            }
        return count;
}
   void BFS(vector< vector <char> >& grids,int i,int j)
   {
       if(i<0 || j<0 || i>=grids.size() || j>=grids[0].size() || grids[i][j]=='0')
           return ;
       grids[i][j]='0';
       BFS(grids,i+1,j);
       BFS(grids,i,j+1);
       BFS(grids,i-1,j);
       BFS(grids,i,j-1);
   }
};
类解决方案{
公众:
国际努米斯兰(矢量和栅格){
整数计数=0;
int n=grid.size();
int m=网格[0]。大小();
if(grid.size()=0 | | grid[0].size()=0)
返回0;
左、右、上、腹部;

对于(inti=0;i这三个语句的顺序是错误的

    int n=grid.size();
    int m=grid[0].size(); // <-- problem here
    if(grid.size()==0 || grid[0].size()==0)
        return 0;

否则,当
grid.size()
等于零时,访问
grid[0]
会发生崩溃。

如何构建
grid
grids
呢?
j>=grids[0]。size()
会比
j>=grids[i].size()更安全,因为它是您要访问的行
i
。(当有人向您发送非矩形向量时)网格和网格是在程序中实现的2d向量。我们只需要实现一个返回岛数的函数。但是在if中(grid.size()==0);它直接返回0它不会检查网格[0]。size()==0;那么您能解释一下为什么worked@Doddigirish它将在这里
int m=grid[0].size()显示
您总是执行此赋值,因为您的语句顺序错误。@我已在您的代码中添加了注释,以显示问题所在。
    if(grid.size()==0 || grid[0].size()==0)
        return 0;
    int n=grid.size();
    int m=grid[0].size();