c++ - 如何在 Boost 的图形库中创建生成树的森林?
问题描述
我是 Boost 图形库的新手,但它似乎非常强大。使用我发现的其他帖子,我设法创建了一个无向图,其顶点/边具有自定义类来保存我需要的其他信息。我还设法创建了所述图的生成树。创建生成树后,我从源顶点开始进行 DFS,并在访问者中进行必要的处理。实现这一点的代码的基本部分如下:
struct InSpanning {
std::set<EdgeDescriptor> edges;
bool operator()(EdgeDescriptor e) const { return edges.count(e); }
} spanning;
boost::kruskal_minimum_spanning_tree(graph, std::inserter(spanning.edges, spanning.edges.end()), boost::weight_map(get(&EdgeInfo::weight, graph)));
MyVisitor vis();
boost::filtered_graph<Graph, InSpanning, boost::keep_all> mst(graph, spanning, {});
boost::depth_first_search(mst, visitor(vis).root_vertex(0));
现在,我的问题是,如何处理我的图表断开连接的情况?我知道我可以通过 boost::connected_components 识别这种情况,但我不清楚如何实际更改上面的代码段,因为我想继续使用 kruskal 的。根据文档,似乎我的两个选项是filtered_graph 或subgraph?老实说,似乎每个连接组件的过滤图是最合理的?我的问题是 kruskal 将图形作为第一个参数,在我的代码中,我首先使用生成树来创建过滤后的图形。所以,我遇到了一个循环问题。如何从过滤图或子图转到图对象以满足函数以创建生成树的森林?
解决方案
推荐阅读
- c++ - 在不使用朋友类的情况下访问私有成员
- javascript - 前一行代码完成后如何使一行代码工作?
- java - 如何以编程方式更改 Google 键盘外观?
- bash - AWS Session Manager 没有采购 bash rc
- c# - LoadedBehavior="Manual" 时 WPF MediaElement 不显示视频
- java - 如何使用 SpringBootTest 启用 JPA 审计?
- python-3.x - 从不同目录的不同脚本导入变量时出错
- python - Python最小样板类初始化
- javascript - Vue.js 类未实例化
- javascript - node.js Googe 身份验证回调错误