求无向图中连通分量的个数
Finding the number of connected components in an undirected graph
本文关键字:分量 更新时间:2023-10-16
来源:
此处
问题:
给定从0到n-1的n个节点和一个无向边列表(每条边是一对节点(,编写一个函数来查找无向图中连接组件的数量。
方法:
class Solution
{
public:
int countComponents(int n, vector<vector<int>>& edges)
{
std::vector<bool> v(n, false);
int count = 0;
for(int i = 0; i < n; ++i)
{
if(!v[i])
{
dfs(edges, v, i);
count++;
}
}
return count;
}
void dfs(std::vector<std::vector<int>>& edges, std::vector<bool>& v, int i)
{
if(v[i] || i > edges.size())
return;
v[i] = true;
for(int j = 0; j < edges[i].size(); ++j)
dfs(edges, v, edges[i][j]);
}
};
错误:
堆缓冲区溢出
我不明白为什么我的代码会导致测试用例的堆缓冲区溢出:
5
[[0,1],[1,2],[2,3],[3,4]]
任何关于如何修复我的代码的建议都将不胜感激。
我的猜测是,对于所提供的输入,edges
向量中只有四个元素,因为顶点4没有传出边。然后,dfs
函数最终递归到i==4的点,但edges
向量只有4个元素,因此最后一个有效的可能性是edges[3]
。
我建议用一个空向量表示一个没有传出顶点的顶点。
此外,if语句的第二部分
if(v[i] || i > edges.size())
return;
似乎不合格,可能只是
if(v[i])
return;
相关文章:
- 具有 2 个分量的数组的特征映射到 3 的向量
- CUDA - 将 float3 数组的 (x,y,z) 分量的最小值/最大值分开?
- 求无向图中连通分量的个数
- 当文本以分量计开头时,将文本C++到 std::vector 中
- 顶点分量的 AVX2 重心插值
- 提取 C++ 中分量之间的子字符串
- 如何使用智能分量和子类应用Typecheck
- 从文件中读取到分量计
- C++ 替换<< >>分量之间的一组字符串
- 使用OpenCV的c++中图像的绿色分量的直方图
- 打印图中矢量的弱分量
- 为什么我的 RGB 转十六进制函数在传递颜色分量时返回 0
- 具有随机分量的算法的时间复杂度(吉莱斯皮算法)
- Arduino 将字符串拆分为带有分量计的数组
- 在 OpenCV 中将矩阵的 SVD 分量相乘
- 特征中的分量式条件/分段定义运算
- 在opencv 2.3中从RGB图像中分离出红色分量图像
- 我如何在图中找到双分量?被称为块
- 如何执行FFT2D(快速傅里叶变换2D) R, G, B颜色分量
- 如何找到图的最大连通分量