微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Segmentation Fault C++ 岛数

如何解决Segmentation Fault C++ 岛数

问题是找到基本上是 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,vector<vector<bool>> &visited)
{
    int rowNbr[8] = {-1,-1,1,1};
    int colNbr[8] = {-1,1};
    visited[row][col] = true;
    for (int k = 0; k < 8; ++k)
        if (isSafe(grid,row + rowNbr[k],col + colNbr[k],visited))
            DFS(grid,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;
}

为什么此代码在 Row=500 和 Col=500 的大型测试用例中存在分段错误。它适用于简短的测试用例。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。