问题描述
问题是找到基本上是 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 (将#修改为@)