【发布时间】:2021-09-21 10:17:20
【问题描述】:
我做了一些调试,发现是 while 循环中的 q.push_back(nbr) 导致了错误,我不明白为什么没有分配请求的空间。请帮忙。 谢谢。
vector<int> bfs2(int V, vector<int> adj2[])
{
int src = 0;
bool visited[V];
for (int i = 0; i < V; i++)
{
visited[i] = false;
}
deque<int> q;
q.push_back(src);
visited[src] = true;
vector<int> res;
while (q.empty() != true)
{
int top = q.front();
q.pop_front();
res.push_back(top);
vector<int> nbrsveec = adj2[top];
for (int nbr : nbrsveec)
{
if (visited[nbr] != true)
{
// cout<<nbr<<endl;
q.push_back(nbr);
visited[nbr] = true;
}
}
}
return res;
}
【问题讨论】:
-
以
bool visited[V];开头的是variable-length array (VLA) 和those are not really part of C++。请改用std::vector。 -
没有充分的理由将
std::vector和 VLA 混合使用。一些垃圾网站教这个,但不要这样做。 -
至于你的问题,
V的值是多少?发生异常时q的大小是多少?adj2数组中有多少个元素?每个向量中有多少个元素?你有没有超出数组、双端队列或向量的界限? -
所有这些容器都包含有符号整数。是否有任何
adj2向量包含负值?请使用示例输入和预期输出创建minimal reproducible example。 -
如果重启“修复”了,我猜可能是一些未初始化的值,请显示minimal reproducible example
标签: c++ breadth-first-search c++-standard-library adjacency-list