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