我是新手来推动图书馆。有没有办法使用boost查找图形的所有子节点。或者我可以参考实现这一点的任何文件都会有所帮助。我想过使用Out_Edge Iterator,因为没有out edge意味着子节点。
答案 0 :(得分:1)
在第一次阅读时,我理解你的问题。只有在第二次阅读时,我才怀疑你实际上是想寻找叶子节点。
如果您有一个给定的节点(例如,顶点#5)并想要列出使用1个弧(边缘)可到达的节点,那么这个问题是有意义的。
给出一个图表:
boost::adjacency_list<> g(10);
你得到了顶点5的所有子节点的顶点描述符:
for (auto vd : boost::make_iterator_range(adjacent_vertices(5, g)))
{
std::cout << "vertex " << vd << " is an out-edge of vertex 5\n";
}
为了让事情更有趣,让我们生成一个随机图:
<强> Live On Coliru 强>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/random.hpp>
#include <iostream>
#include <random>
int main() {
boost::adjacency_list<> g;
std::mt19937 rng { 42 };
generate_random_graph(g, 10, 20, rng);
for (auto vd : boost::make_iterator_range(adjacent_vertices(5, g)))
{
std::cout << "vertex " << vd << " is an out-edge of vertex 5\n";
}
}
打印
vertex 1 is an out-edge of vertex 5
vertex 6 is an out-edge of vertex 5
图表为visualized:
连接顶点的边数称为度。可以使用 out_degree
:
for (auto vd : boost::make_iterator_range(vertices(g)))
std::cout << "vertex #" << vd << " has out_degree: " << out_degree(vd, g) << "\n";
你会发现这意味着顶点#1和#2是叶子节点。
可视化叶节点:Live On Coliru