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

标签 c++ algorithm boost graph

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

相关文章:

c++ - 有没有办法获取 map 类型?

c - 使用字母在C中绘制圆的最佳方法

c++ - 将 boost::array<char> 复制到 std::string

c++ - boost asio串口 "end of file"

c++ - 来自指针的 shared_ptr

c++ - 将 uint8 更改为 x 倍二进制 1 MSB

c++ - Do...While 循环可能带有临时变量的 if ...else 语句

c++ - 这个c++代码有什么问题

algorithm - 统一成本搜索与深度优先搜索

c++ - 你如何计算两个矩形的重叠百分比?