C++ 分段故障C++;岛屿数目
问题是找到基本上是dfs的孤岛的数量,对于短测试用例,它工作得很好,但是对于大测试用例,它有分段错误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
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不会修改网格。因此,不需要在参数列表中传递网格。使网格成为全局的,节省堆栈内存并允许您处理更大的问题。