C++ Boost 图形库 : Building a vector of vertices visited in an undirected graph search?

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

根据我收集到的如何使用 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));

最佳答案

vector 必须是您的访问者的成员。在 discover_vertex 函数中,只需将发现的元素插入 vector 。

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

 }

关于C++ Boost 图形库 : Building a vector of vertices visited in an undirected graph search?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10189967/

相关文章:

c++ - 从 Boost 图中删除 100,000 多个节点

c++ - 将 uin32_t 写入 asio::streambuf

java - 为什么你保证找到你的结果,如果它在 BFS 的图中而不是 DFS?

c++ - C++ 中的递归深度优先搜索 (DFS) 算法

c++ - 如何将类中的静态常量结构用作真正的常量 - 即数组大小

c++ - "Unresolved external _WinMain@16"如果我将 WndProc 移动到另一个 cpp 文件

c++ - 从另一个子 vector 或子矩阵创建 boost::numeric::ublas vector

c++ - Boost::HPC 侵入式

javascript - 如何使用 Javascript 计算一般树中子级的总和

c++ - 用户提供的构造函数与显式默认的构造函数