Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 分段故障C++;岛屿数目_C++_Graph Theory_Depth First Search - Fatal编程技术网

C++ 分段故障C++;岛屿数目

C++ 分段故障C++;岛屿数目,c++,graph-theory,depth-first-search,C++,Graph Theory,Depth First Search,问题是找到基本上是dfs的孤岛的数量,对于短测试用例,它工作得很好,但是对于大测试用例,它有分段错误 int isSafe( vector<vector<char>> &grid, int row, int col, vector<vector<bool>> &visited) { return ((row >= 0) && (row < g

问题是找到基本上是dfs的孤岛的数量,对于短测试用例,它工作得很好,但是对于大测试用例,它有分段错误

int isSafe(
    vector<vector<char>> &grid,
    int row,
    int col,
    vector<vector<bool>> &visited)
{
    return ((row >= 0) &&
            (row < grid.size()) &&
            (col >= 0) &&
            (col < grid[0].size()) &&
            (grid[row][col] == '1') &&
            !visited[row][col]);
}
void DFS(
    vector<vector<char>> &grid,
    int row, int col,
    vector<vector<bool>> &visited)
{
    int rowNbr[8] = {-1, -1, -1, 0, 0, 1, 1, 1};
    int colNbr[8] = {-1, 0, 1, -1, 1, -1, 0, 1};
    visited[row][col] = true;
    for (int k = 0; k < 8; ++k)
        if (isSafe(grid, row + rowNbr[k], col + colNbr[k], visited))
            DFS(grid, row + rowNbr[k], col + colNbr[k], visited);
}
int numIslands(vector<vector<char>> &grid)
{
    // Code here
    if (grid.empty())
        return 0;
    int Row = grid.size();
    int Col = grid[0].size();
    vector<vector<bool>> visited(Row, vector<bool>(Col, false));
    int count = 0;
    for (int i = 0; i < Row; ++i)
        for (int j = 0; j < Col; ++j)
        {
            if ((grid[i][j] == '1') && !visited[i][j])
            {
                DFS(grid, i, j, visited);
                ++count;
            }
        }
    return count;
}
int-isSafe(
向量和网格,
int row,
int col,
向量机(已访问)
{
返回((行>=0)&&
(行=0)&&
(列<网格[0]。大小()&&
(网格[行][col]=“1”)&&
!访问[行][col];
}
无效DFS(
向量和网格,
整行,整列,
向量机(已访问)
{
int rowNbr[8]={-1,-1,0,0,1,1,1};
int colNbr[8]={-1,0,1,-1,1,-1,0,1};
访问[行][列]=真;
对于(int k=0;k<8;++k)
if(isSafe(网格,行+行[k],列+列[k],已访问))
DFS(网格,行+行编号[k],列+列编号[k],已访问);
}
国际努米斯兰(矢量和栅格)
{
//代码在这里
if(grid.empty())
返回0;
int Row=grid.size();
int Col=网格[0]。大小();
访问向量(行、向量(列、假));
整数计数=0;
对于(int i=0;i

为什么这段代码在Row=500和Col=500的大型测试用例中存在分段错误。对于较短的测试用例,它运行良好。

您能先给出问题吗?一个可能的问题可能是由于递归函数调用太多。尝试使用迭代BFSY您的递归函数DFS不会修改网格。因此,不需要在参数列表中传递网格。使网格成为全局的,节省堆栈内存并允许您处理更大的问题。