gpt4 book ai didi

c++ - Boost Graph获取相邻顶点

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:58:54 24 4
gpt4 key购买 nike

我正在使用 Boost 库处理图形。该图定义如下。

 typedef boost::adjacency_list<boost::setS,boost::setS,boost::undirectedS, uint32_t, float> AdjacencyList;

在使用适当的数据创建图形后,在一个单独的函数中,我想打印每个顶点的 adjacent_vertices 以及它们在开始时计算的适当的边权重。

创建部分运行良好,但当我想提取相邻顶点时,我没有得到值。

typedef boost::graph_traits<AdjacencyList>::adjacency_iterator AdjacencyIterator;
AdjacencyList::vertex_iterator i, end;
for (boost::tie(i, end) = boost::vertices(adjacency_list); i != end; i++) {
AdjacencyIterator ai, a_end;
boost::tie(ai, a_end) = boost::adjacent_vertices( *i, adjacency_list);
for (; ai != a_end; ai++) {
std::cout << *ai << "\t";
}
}

我得到的输出是十六进制数的内存地址。如何获取顶点索引和边权重?

最佳答案

您应该访问属性包,或者使用图的 operator[] 和顶点/边描述符,或者使用属性映射:

使用operator[]

Live On Coliru

#include <boost/graph/adjacency_list.hpp>
#include <iostream>

typedef boost::adjacency_list<boost::setS,boost::setS,boost::undirectedS, uint32_t, float> AdjacencyList;
typedef boost::graph_traits<AdjacencyList>::adjacency_iterator AdjacencyIterator;

int main() {
AdjacencyList adjacency_list;;

boost::add_edge(
boost::add_vertex(10, adjacency_list),
boost::add_vertex(20, adjacency_list),
1.5f,
adjacency_list
);

boost::add_edge(
boost::add_vertex(30, adjacency_list),
boost::add_vertex(40, adjacency_list),
2.5f,
adjacency_list
);

AdjacencyList::vertex_iterator i, end;

for (boost::tie(i, end) = boost::vertices(adjacency_list); i != end; i++) {
AdjacencyIterator ai, a_end;

boost::tie(ai, a_end) = boost::adjacent_vertices(*i, adjacency_list);
for (; ai != a_end; ai++) {
std::cout << adjacency_list[*ai] << "\t";
}
}
}

输出:

10  20  30  40  

使用属性映射:

boost::property_map<AdjacencyList, boost::vertex_bundle_t>::type pmap = boost::get(boost::vertex_bundle, adjacency_list);

现在您可以使用 boost::get(pmap, vertex_descriptor1) 访问顶点属性包

关于c++ - Boost Graph获取相邻顶点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31540115/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com