从特定顶点执行深度优先算法

Posted

技术标签:

【中文标题】从特定顶点执行深度优先算法【英文标题】:Performing depth-first algorithm from a specific vertex 【发布时间】:2011-01-07 15:06:53 【问题描述】:

我正在尝试找到一种方法,通过使用 boost 图形库。

Boost 库提供的深度优先算法评估从起始顶点到最后一个顶点的图。但是,如果必须从特定顶点搜索图形怎么办?

有什么建议吗?

【问题讨论】:

【参考方案1】:

看看BGL's documentation。

有一个重载,您可以在其中提供起始顶点。

template <class Graph, class DFSVisitor, class ColorMap>
void depth_first_search(const Graph& g, DFSVisitor vis, ColorMap color, 
                        typename graph_traits<Graph>::vertex_descriptor start)

【讨论】:

确实存在过载,但未记录如何提供颜色图。【参考方案2】:

BGL 提供了两种机制来设置 depth_first_search 的起始顶点。您可以使用需要提供 ColorMap 的重载运算符,也可以直接设置访问者的属性:

boost::depth_first_search(myGraph, boost::visitor(myVisitor).root_vertex(myVertex));

【讨论】:

我认为这应该是答案,因为我找不到描述如何提供颜色图的文档。【参考方案3】:
boost::depth_first_search(myGraph, boost::visitor(myVisitor).root_vertex(myVertex));

这只是一个使用命名参数版本调用 depth_first_search() 的简单示例。见Named Parameters。我发现即使您确实指定了一个顶点而不是图的根,算法仍然会访问图中的所有顶点。它只会从您指定的那个开始。

要仅访问从指定顶点可到达的那些顶点,您需要使用 depth_first_visit 算法。这需要指定颜色图。这是一张适合我的彩色地图。

使用 Graph = boost::adjacency_list; 使用 IndexMap = boost::property_map::const_type; IndexMap indexMap = boost::get(boost::vertex_index, m_graph); 使用 ColorMap = boost::iterator_property_map; std::vector color_vec(num_vertices(m_graph)); ColorMap colorMap(&color_vec.front(), indexMap);

【讨论】:

以上是关于从特定顶点执行深度优先算法的主要内容,如果未能解决你的问题,请参考以下文章

算法系列之广度优先搜索与深度优先搜索

常用的图算法:深度优先(DFS)

深度优先遍历怎么修改为广度优先遍历

深度优先搜索法自己的理解

图的深度优先搜索

用邻接表表示图进行深度优先遍历时,通常采用()来实现算法