【问题标题】:C++ Boost graph library: Building a vector of vertices visited in an undirected graph search?C ++ Boost图形库:构建在无向图搜索中访问的顶点向量?
【发布时间】:2012-04-17 11:02:14
【问题描述】:

根据我收集到的关于如何使用 BGL 以便从已知根节点调用图的 DFS 的信息,我需要按照以下方式做一些事情

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)); 

 }

现在我不确定如何更改它,以便在 DFS 以类似于如何使用最小生成树算法的方式访问图中的所有顶点时构建 vertexId(或指针)的std::vector,例如

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

【问题讨论】:

    标签: c++ boost depth-first-search boost-graph


    【解决方案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();
    
     }
    

    【讨论】:

    • 谢谢,这是我的怀疑,但是我如何调用 boost::undirected_dfs / 检索 MyVertex 的向量?只是 MyVisitor 中的一个公共 getVV 方法,还是有一种类似于 kruskal 调用的更高级的方法?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多