我想使用depth_first_search算法。因为我需要 指定起始顶点的DFS版本,我也 必须定义一个ColorMap。那就是我想要的功能 使用:
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)
https://www.boost.org/doc/libs/1_67_0/libs/graph/doc/depth_first_search.html
由于地图对我而言无关紧要,因此默认的ColorMap
就足够了。
您能给我一个提示,如何在depth_first_search中创建并传递它作为参数吗?
答案 0 :(得分:3)
只需使用命名参数重载即可,这将使您可以在仅使用默认颜色图的同时指定起始顶点。
template <class Graph, class class P, class T, class R>
void depth_first_search(Graph& G, const bgl_named_params<P, T, R>& params);
示例:
boost::depth_first_search(graph, boost::root_vertex(start_vertex));
答案 1 :(得分:0)
我同意0x5453的回答。使用命名参数重载更容易。但是,如果您确实想知道如何初始化ColorMap
对象,这就是答案。
默认值:使用大小为num_vertices(g)的default_color_type的std :: vector创建的iterator_property_map,并将i_map用于索引图。
Graph g;
/*
* do something with graph
*/
// number of colors should be the same as number of vertices.
std::vector<boost::default_color_type> colors(boost::num_vertices(g));
// create a ColorMap object (cpp_version < 17)
auto color_map = boost::make_iterator_property_map(colors.begin(),
boost::get(boost::vertex_index, g));
// In C++17, make_iterator_property_map isn't necessary, as we have class
// template argument deduction
boost::iterator_property_map color_map(colors.begin(),
boost::get(boost::vertex_index, g));
此处make_iterator_property_map接受两个参数并返回iterator_property_map
。第一个参数是颜色值的迭代器,第二个参数是图形的顶点索引和colors
索引之间的映射。