ブーストグラフライブラリを使用して、特定の頂点から深さ優先アルゴリズムを実行する方法を見つけようとしています。
Boostライブラリが提供する深さ優先アルゴリズムは、開始頂点から最後の頂点までのグラフを評価します。しかし、グラフを特定の頂点から検索する必要がある場合はどうでしょうか。
助言がありますか?
ブーストグラフライブラリを使用して、特定の頂点から深さ優先アルゴリズムを実行する方法を見つけようとしています。
Boostライブラリが提供する深さ優先アルゴリズムは、開始頂点から最後の頂点までのグラフを評価します。しかし、グラフを特定の頂点から検索する必要がある場合はどうでしょうか。
助言がありますか?
BGLのドキュメントをご覧ください。
開始頂点を指定できるオーバーロードがあります。
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)
BGLdepth_first_searchの開始頂点を設定するための2つのメカニズムを提供します。ColorMapの提供を必要とするオーバーロード演算子を使用するか、訪問者のプロパティを直接設定することができます。
boost::depth_first_search(myGraph, boost::visitor(myVisitor).root_vertex(myVertex));
boost::depth_first_search(myGraph, boost::visitor(myVisitor).root_vertex(myVertex));
これは、depth_first_search()の呼び出しの名前付きパラメーターバージョンを使用する例にすぎません。名前付きパラメータを参照してください。開始するグラフのルート以外の頂点を指定した場合でも、アルゴリズムはグラフ内のすべての頂点にアクセスすることがわかりました。指定したものから開始します。
指定された頂点から到達可能な頂点のみにアクセスするには、depth_first_visitアルゴリズムを使用する必要があります。これには、カラーマップを指定する必要があります。これが私のために働いたカラーマップです。
Graph = boost::adjacency_listを使用します。 IndexMap = boost :: property_map::const_type;を使用します。 IndexMap indexMap = boost :: get(boost :: verbex_index、m_graph); ColorMap = boost::iterator_property_map;を使用します。 std :: vector color_vec(num_vertices(m_graph)); ColorMap colorMap(&color_vec.front()、indexMap);