使用boost在图形中查找子节点

时间:2018-02-04 14:05:01

标签: c++ boost graph boost-graph

我是新手来推动图书馆。有没有办法使用boost查找图形的所有子节点。或者我可以参考实现这一点的任何文件都会有所帮助。我想过使用Out_Edge Iterator,因为没有out edge意味着子节点。

1 个答案:

答案 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

enter image description here

查找 Nemo 潜在客户节点

连接顶点的边数称为。可以使用 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

enter image description here