我正在使用 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[]
#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/