Boost
Libraries
arrow_drop_down
Boost.Graph
M
D
C++ 14 Added in Boost 1.18.0
Categories:   ContainersAlgorithmsIterators

The BGL graph interface and graph components are generic, in the same sense as the Standard Template Library (STL).

This Release

Jeremy Siek and a University o team.
Author
Jeremy Siek and a University of Notre Dame team.
Author
K. Noel Belcourt
K. Noel Belcourt
Maintainer
Jeremy W. Murphy
Jeremy W. Murphy
Maintainer
Rene Rivera
Rene Rivera
Contributor - New
Andrea Cassioli
Contributor - New
Pavel Samolysov
Contributor - New
Jan-Grimo Sobez
Jan-Grimo Sobez
Contributor - New
Murray Cumming
Contributor - New
Georgy Guminov
Contributor - New
Andrea Cassioli
Contributor - New
Arnaud Becheler
Contributor - New
Davide Iafrate
Contributor - New
Peter Kerzum
Contributor - New
Tinko Bartels
Tinko Bartels
Contributor - New
Alexander Grund
Alexander Grund
Contributor - New
sdarwin
sdarwin
Contributor - New
Murray Cumming
Murray Cumming
Contributor - New
Andrey Semashev
Andrey Semashev
Contributor - New
Joris van Rantwijk
Contributor - New

Dependencies

Library dependencies will be generated soon, please check back later.

Boost Graph Library

Docs C++14 CI License: BSL-1.0 Boost release

The Boost Graph Library (BGL) is a generic library that allows users to:

  1. Represent graph data using different structures (adjacency matrix, adjacency list, compressed sparse row, vectors of vectors, user-defined data structures).
  2. Attach user-defined data to vertices, edges, or the graph itself.
  3. Run a large number of algorithms on the graph.
  4. Inject user logic into algorithms using visitor hooks.

Example

Try it on Compiler Explorer

#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/dijkstra_shortest_paths.hpp>
#include <boost/graph/visitors.hpp>
#include <iostream>
#include <limits>
#include <vector>

struct City {};
struct Road { int cost; };

using namespace boost;
using Graph = adjacency_list<vecS, vecS, directedS, City, Road>;
using Vertex = graph_traits<Graph>::vertex_descriptor;

int main() {
    Graph g(4);
    add_edge(0, 1, Road{1}, g);
    add_edge(1, 2, Road{2}, g);
    add_edge(0, 2, Road{10}, g);
    add_edge(2, 3, Road{1}, g);

    // Storage: you control allocation, lifetime, and container type
    std::vector<Vertex> storage_pred(num_vertices(g));
    std::vector<int>    storage_dist(num_vertices(g));

    // Property maps: lightweight views into the storage
    auto index_map       = get(vertex_index, g);
    auto costs_map       = get(&Road::cost, g);
    auto predecessor_map = make_iterator_property_map(storage_pred.begin(), index_map);
    auto distance_map    = make_iterator_property_map(storage_dist.begin(), index_map);

    dijkstra_shortest_paths(g, vertex(0, g),
        predecessor_map, distance_map,
        costs_map, index_map,
        std::less<int>(), std::plus<int>(),
        std::numeric_limits<int>::max(), 0,
        dijkstra_visitor<null_visitor>());

    for (auto v : make_iterator_range(vertices(g)))
        std::cout << "distance to " << v << " = " << storage_dist[v] << "\n";
}
distance to 0 = 0
distance to 1 = 1
distance to 2 = 3
distance to 3 = 4

Algorithms

BGL ships dozens of graph algorithms: shortest paths (Dijkstra, Bellman-Ford, A*, Floyd-Warshall, Johnson), spanning trees (Kruskal, Prim), maximum flow (Edmonds-Karp, push-relabel, Boykov-Kolmogorov), traversal (BFS, DFS, topological sort), planarity testing, isomorphism, component decomposition, and more.

See the full algorithm reference for the complete catalogue.

Help and feedback

Using BGL

Install Boost via your package manager:

Manager Command
vcpkg vcpkg install boost-graph
Conan conan install --requires=boost/[*]
apt (Debian/Ubuntu) sudo apt install libboost-graph-dev
Homebrew (macOS) brew install boost

Then wire it into CMake:

find_package(Boost REQUIRED COMPONENTS graph)
target_link_libraries(my_app PRIVATE Boost::graph)

Most of BGL is header-only. Linking Boost::graph is only required for the GraphViz and GraphML parsers.

Building from source

For working on BGL itself (building Boost from source, running the test suite), see CONTRIBUTING.md.