DFS访问器不遍历分离的顶点
DFS visitor does not traverse detached vertices
我有一个用邻接表表示的图。我对它应用了depth_first_visit算法。一切都很正常。问题是算法只访问与起始点顶点相连的顶点。如果我有单独的顶点(没有任何连接),它们不会被遍历。当然,我已经解决了这个问题,通过找到未访问的顶点,然后开始从他们的算法,但在文档中,它是写的,这些"分离"顶点也应该被遍历。问题-我做错了什么吗?
typedef boost::adjacency_list<boost::vecS, boost::vecS, boost::directedS, Vertex, Edge > GraphType;
vector<default_color_type> color_map(num_vertices(m_graph));
depth_first_visit(
m_graph,
*vp.first,
custom_dfs_visitor(m_currentPath, visited),
make_iterator_property_map(
color_map.begin(),
get(vertex_index, m_graph),
color_map[0]),
Terminator(m_currentPath)
);
"如果一个图是断开连接的,DFS不会访问它的所有顶点。具体请参见查找连接组件算法。参考:Algolist
你没有做错什么。而你的修复(找到其他未访问的节点,并重新开始算法)是其他实现所做的。
作为进一步的可见证明,看看TimL页面上的这个出色实现。您可以继续单击并观察正在执行的DFS。(向下滚动到页面中间)
看起来您的算法是正确的,因为这实际上是DFS所做的:它遍历所有连接的节点,这意味着您需要在每个连接的组件上分别运行它。根据您的用例,您可能希望查看用于查找连接组件的算法,这些算法利用某种DFS或BFS算法。
相关文章:
- 如何循环打印顶点结构
- D3D11-将混合权重和索引传递到顶点着色器
- C++:如何读取分离变量,然后读取向量
- 分离一个静态常量 std::thread?
- 从返回的顶点缓冲区查询顶点结构
- Vulkan 中的动态顶点缓冲区格式设置
- .h 和.cpp文件分离时出错,但仅使用 .h 文件时没有错误.我做错了什么?
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- 如何在 c++ 中将数据与文件流分离
- 如何将一半传递给顶点着色器?
- 为什么堆栈和堆在内存中分离得如此之多?
- 在 DirectX 11 中从 GPU 读回顶点缓冲区(并获取顶点)
- QT QOpenGLWidget:如何在不使用数据块复制的情况下修改VBO中的单个顶点值?
- 使用 OpenGL 4.5 更改所选顶点的颜色
- 具有可分离内核的 2D 模糊卷积
- 为什么即使调用了析构函数,C++11 中的分离线程也可以执行
- Direct3D 11 - HLSL - 获取顶点索引 ID
- 创建异构顶点数据数组的可移植方法
- 使用 glvertex4i 传递网格面索引时的顶点着色器错误
- DFS访问器不遍历分离的顶点