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 W. Murphy
Jeremy W. Murphy
Maintainer
Arnaud Becheler
Maintainer

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.

All Time

Jeremy Siek
Jeremy Siek
Contributor
Jeremiah Willcock
Jeremiah Willcock
Contributor
Douglas Gregor
Douglas Gregor
Contributor
John Maddock
John Maddock
Contributor
Andrew Sutton
Andrew Sutton
Contributor
Vladimir Prus
Vladimir Prus
Contributor
K. Noel Belcourt
K. Noel Belcourt
Contributor
Beman Dawes
Beman Dawes
Contributor
Aaron Windsor
Aaron Windsor
Contributor
Dave Abrahams
Dave Abrahams
Contributor
Ronald Garcia
Ronald Garcia
Contributor
nobody
Contributor
jrmarsha
jrmarsha
Contributor
Cromwell D. Enage
Cromwell D. Enage
Contributor
Daniel James
Daniel James
Contributor
Peter Dimov
Peter Dimov
Contributor
Jan-Grimo Sobez
Jan-Grimo Sobez
Contributor
Joris van Rantwijk
Contributor
Murray Cumming
Murray Cumming
Contributor
Daan Kolthof
Daan Kolthof
Contributor
Jürgen Hunold
Jürgen Hunold
Contributor
Lie-Quan Lee
Contributor
Rene Rivera
Rene Rivera
Contributor
Eric Niebler
Eric Niebler
Contributor
Sven Gato Redsun
Sven Gato Redsun
Contributor
E Kawashima
E Kawashima
Contributor
sehe
sehe
Contributor
Sebastian Brockmeyer
Sebastian Brockmeyer
Contributor
Jakob Lykke Andersen
Jakob Lykke Andersen
Contributor
Mads Jensen
Mads Jensen
Contributor
Josef Cibulka
Contributor
Alexander Lauser
Alexander Lauser
Contributor
Marshall Clow
Marshall Clow
Contributor
Stephen Kelly
Stephen Kelly
Contributor
andrea-cassioli-maersk
andrea-cassioli-maersk
Contributor
Alec Edgington
Alec Edgington
Contributor
Gennaro Prota
Contributor
jiyi
Contributor
Valentyn Shtronda
Valentyn Shtronda
Contributor
Josh Marshall
Josh Marshall
Contributor
Andrey Semashev
Andrey Semashev
Contributor
Nicholas Edmonds
Nicholas Edmonds
Contributor
Darin Adler
Contributor
Stefan Slapeta
Contributor
yi-ji
yi-ji
Contributor
Edward Diener
Edward Diener
Contributor
Jonathan Turkanis
Jonathan Turkanis
Contributor
BenPope
BenPope
Contributor
Akira Takahashi
Akira Takahashi
Contributor
Maël Valais
Maël Valais
Contributor
Daniel Yang
Contributor
Troy D. Straszheim
Troy D. Straszheim
Contributor
Michael A. Jackson
Michael A. Jackson
Contributor
Daniela Engert
Daniela Engert
Contributor
Steven Watanabe
Steven Watanabe
Contributor
Marcel Raad
Marcel Raad
Contributor
vslashg
vslashg
Contributor
George Williams
George Williams
Contributor
Glen Fernandes
Glen Fernandes
Contributor
Guillaume Melquiond
Guillaume Melquiond
Contributor
Anthony Van Herrewege
Contributor
Murray Cumming
Contributor
Pavel I. Kryukov
Pavel I. Kryukov
Contributor
Andreas Huber
Contributor
Andy Shulman
Contributor
Matt Barr
Contributor
Arvin Schnell
Arvin Schnell
Contributor
Billy K. Poon
Billy K. Poon
Contributor
Rasmus Ahlberg
Contributor
Denis Davydov
Denis Davydov
Contributor
John Zhang
John Zhang
Contributor
Jonathan Wakely
Jonathan Wakely
Contributor
David Einstein
David Einstein
Contributor
Björn Karlsson
Contributor
Aleksey Gurtovoy
Contributor
marcinz
marcinz
Contributor
Victor A. Wagner Jr.
Contributor
Mateusz Polnik
Mateusz Polnik
Contributor
Justin Viiret
Justin Viiret
Contributor
Caleb Epstein
Contributor
Kolya Matteo
Kolya Matteo
Contributor
Louis Dionne
Louis Dionne
Contributor
Viktor T
Viktor T
Contributor
mikael
mikael
Contributor
James E. King III
James E. King III
Contributor
Lorenz Breidenbach
Lorenz Breidenbach
Contributor
hermann@stamm-wilbrandt.de
Contributor
Ahmed Charles
Ahmed Charles
Contributor
Andreas Scherer
Andreas Scherer
Contributor
akumta
akumta
Contributor
Marc Glisse
Marc Glisse
Contributor
Arne B
Contributor
felix
felix
Contributor
Jared Grubb
Jared Grubb
Contributor
Daniel J. H
Daniel J. H
Contributor
Ola Nilsson
Ola Nilsson
Contributor
coderakki
coderakki
Contributor
Derek McBlane
Derek McBlane
Contributor
l00574988
Contributor
Bruno Martinez
Bruno Martinez
Contributor
Joel de Guzman
Joel de Guzman
Contributor
Matt Pulver
Matt Pulver
Contributor
Tuukka Norri
Tuukka Norri
Contributor
Bryce Adelstein-Lelbach
Bryce Adelstein-Lelbach
Contributor
Jens Maurer
Jens Maurer
Contributor
Antony Polukhin
Antony Polukhin
Contributor
Pavel Samolysov
Contributor
Jean-Michaël Celerier
Jean-Michaël Celerier
Contributor
Alexander Grund
Alexander Grund
Contributor
Neil Groves
Neil Groves
Contributor
Joaquin M. López Muñoz
Joaquin M. López Muñoz
Contributor
Romain Geissler
Romain Geissler
Contributor
Jurko Gospodnetić
Jurko Gospodnetić
Contributor
Tinko Bartels
Tinko Bartels
Contributor
etienneINSA
etienneINSA
Contributor
Shoaib Meenai
Shoaib Meenai
Contributor
hlynurf
hlynurf
Contributor
Nik Reiman
Nik Reiman
Contributor
Kohei Takahashi
Kohei Takahashi
Contributor
Alex Hagen-Zanker
Alex Hagen-Zanker
Contributor
Anthony Eden
Anthony Eden
Contributor
Alexander Zaitsev
Alexander Zaitsev
Contributor
康小广
康小广
Contributor
Ciro Santilli
Ciro Santilli
Contributor
Roland Schwarz
Roland Schwarz
Contributor
Stephan Diederich
Stephan Diederich
Contributor
Katrin Leinweber
Katrin Leinweber
Contributor
Alan Somers
Alan Somers
Contributor
Jedrzej Solecki
Contributor
Stefan Hammer
Contributor
Fábio Silva
Fábio Silva
Contributor
Myles1
Myles1
Contributor
Vadim Peretokin
Vadim Peretokin
Contributor
Eugene Zelenko
Contributor
Jared Khan
Jared Khan
Contributor
Thomas Witt
Thomas Witt
Contributor
Alisdair Meredith
Alisdair Meredith
Contributor
Ashish Kumar
Ashish Kumar
Contributor
Philip Allgaier
Philip Allgaier
Contributor
char-lie
char-lie
Contributor
Vicky Vergara
Vicky Vergara
Contributor
Jesse Li
Jesse Li
Contributor
Conrad Poelman
Conrad Poelman
Contributor
Jiachen Dong
Jiachen Dong
Contributor
Georgy Guminov
Contributor
Julien DELACROIX
Contributor
Noel Belcourt
Noel Belcourt
Contributor
Francois Kritzinger
Francois Kritzinger
Contributor
ꓪꓱꓱꓠꓛꓧ
ꓪꓱꓱꓠꓛꓧ
Contributor