Boost Graph Library 是c++中实现图结构性能比较好,也比较省心的一个库,但是官方文档让人看的比较累。这里搬运油管上的一个英文视频,小哥讲的也比较清楚,大家可以去看看原视频。文中代码可以在小哥的github中找到。
使用Boost Graph Libary时需要考虑三件事情:
- 如何保存你的图(graph)结构
- 如何向节点(vertices)和边(edge)添加属性
- 如何获得(get)这些属性并在算法中使用
这里我们主要学习 boost::adjacency_list
下面就代码进行分块讲解,再次提醒代码地址—>点这里
#include <iostream>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/graphviz.hpp>
#include <boost/graph/properties.hpp>
#include <boost/property_map/property_map.hpp>
#include <boost/graph/named_function_params.hpp>
// the predefined property types are listed here:
// http://www.boost.org/doc/libs/1_64_0/libs/graph/doc/using_adjacency_list.html#sec:adjacency-list-properties
// http://www.boost.org/doc/libs/1_64_0/libs/graph/doc/bundles.html
头文件
void example0()
{
// a simple adjaceny list with no extra properties.
typedef boost::adjacency_list<boost::vecS, boost::vecS,
boost::directedS,
boost::no_property,
boost::no_property
> MyGraphType;
MyGraphType G;
auto v1 = add_vertex(G);
auto v2 = add_vertex(G);
auto e = add_edge(v1, v2, G);
auto vpair = vertices(G);
for(auto iter=vpair.first; iter!=vpair.second; iter++) {
std::cout << "vertex " << *iter << std::endl;
}
auto epair = edges(G);
for(auto iter=epair.first; iter!=epair.second; iter++) {
std::cout << "edge " << source(*iter, G) << " - " << target(*iter, G)