DFS访问器不遍历分离的顶点

DFS visitor does not traverse detached vertices

本文关键字:分离 顶点 遍历 访问 DFS      更新时间:2023-10-16

我有一个用邻接表表示的图。我对它应用了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算法。