2

既知のルートノードからグラフのDFSを呼び出すためにBGLを使用する方法を収集できることから、次の行に沿って何かを行う必要があります。

class MyVisitor : public boost::default_dfs_visitor
{
  public:
  void discover_vertex(MyVertex v, const MyGraph& g) const
 {
    cerr << v << endl;
    return;
 }

};


 void bfsMethod(Graph g, int rootNodeId)
 {

   boost::undirected_dfs(g, vertex(rootNodeId,g), boost::visitor(vis)); 

 }

std::vector最小スパニングツリーアルゴリズムを使用する方法と同様の方法で、DFSがグラフ内のすべての頂点にアクセスするときに、vertexId(またはポインター)が構築されるように、これをどのように変更するかがわかりません。

std::vector < JPEdge > spanning_tree;
kruskal_minimum_spanning_tree(g, std::back_inserter(spanning_tree));
4

1 に答える 1

1

ベクターは訪問者のメンバーである必要があります。関数ではdiscover_vertex、検出された要素をベクトルにプッシュするだけです。

class MyVisitor : public boost::default_dfs_visitor
{
  public:
  void discover_vertex(MyVertex v, const MyGraph& g) const
 {
    cerr << v << endl;
    vv.push_back(v);
    return;
 }

  vector<MyVertex> GetVector() const {return vv; }

 private: 
 vector<MyVertex> vv;

};

void bfsMethod(Graph g, int rootNodeId)
{
  MyVisitor vis;
  boost::undirected_dfs(g, vertex(rootNodeId,g), vis); 
  vector<MyVertex> vctr = vis.GetVector();

 }
于 2012-04-17T11:07:02.833 に答える