History
The Boost Graph Library began its life as the Generic Graph Component Library (GGCL), a software project at the Lab for Scientific Computing (LSC) at the University of Notre Dame, under the direction of Professor Andrew Lumsdaine. The Lab’s research directions include numerical linear algebra, parallel computing, and software engineering (including generic programming).
Soon after the Standard Template Library was released, work began at the LSC to apply generic programming to scientific computing. The Matrix Template Library (Jeremy Siek’s masters thesis) was one of the first projects. Many of the lessons learned during construction of the MTL were applied to the design and implementation of the GGCL.
Graph algorithms play an important role in sparse matrix computations, so the LSC had a need for a good graph library. However, none of the available graph libraries (LEDA, GTL, Stanford GraphBase) were written using the generic programming style of the STL, and hence did not fulfill the flexibility and high-performance requirements of the LSC. Others were also expressing interest in a generic C++ graph library. During a meeting with Bjarne Stroustrup we were introduced to several people at AT&T who needed such a library. There had also been earlier work in the area of generic graph algorithms, including some codes written by Alexander Stepanov, and Dietmar Kühl’s masters thesis.
With this in mind, and motivated by homework assignments in his algorithms class, Jeremy began prototyping an interface and some graph classes in the spring of 1998. Lie-Quan Lee then developed the first version of GGCL, which became his masters thesis project.
The following year, Jeremy went to work for SGI with Alexander Stepanov and Matt Austern. During this time Alex’s disjoint-sets based connected components algorithm was added to GGCL, and Jeremy began working on the concept documentation for GGCL similar to Matt’s STL documentation.
While working at SGI, Jeremy heard about Boost and was excited to find a group of people interested in creating high-quality C++ libraries. At Boost there were several people interested in generic graph algorithms, most notably Dietmar Kühl. Some discussions about generic interfaces for graph structures resulted in a revision of GGCL which closely resembles the current Boost Graph Library interface.
On September 4, 2000 GGCL passed the Boost formal review and became the Boost Graph Library (BGL). The first release of BGL was September 27, 2000.
Historical changelog (through Boost 1.36)
| This changelog is frozen at Boost 1.36 (2008). Modern release notes live in the Boost release announcements and the git history of boostorg/graph. It is retained here as a record of the library’s early evolution. |
Version 1.36.0
New algorithms and components
-
r_c_shortest_paths, resource-constrained shortest paths, from Michael Drexl.
Version 1.35.0
New algorithms and components
-
boykov_kolmogorov_max_flow(formerlykolmogorov_max_flow), from Stephan Diederich as part of the 2006 Google Summer of Code. -
read_dimacs_max_flowandwrite_dimacs_max_flowfor max-flow problems, from Stephan Diederich. -
read_graphml/write_graphmlfor GraphML input/output, from Tiago de Paula Peixoto. -
minimum_cycle_ratioandmaximum_cycle_ratio, from Dmitry Bufistov and Andrey Parfenov. -
boyer_myrvold_planarity_test, along with a suite of algorithms for planar graphs, from Aaron Windsor.
Enhancements
-
LEDA adaptor improvements, from Jens Müller.
Version 1.34.1
Bug fixes
-
bellman_ford_shortest_paths: fixed a bug where certain negative cycles were not correctly detected.
Version 1.34.0
New algorithms and components
-
edmonds_maximum_cardinality_matching, from Aaron Windsor. -
lengauer_tarjan_dominator_tree, from JongSoo Park. -
compressed_sparse_row_graph, from Jeremiah Willcock and Douglas Gregor of Indiana University. -
sorted_erdos_renyi_iterator, from Jeremiah Willcock of Indiana University.
Enhancements
-
The compiled library for GraphViz reading is now called
boost_graphrather thanbgl-viz. -
biconnected_componentsgained a visitor parameter and supports named parameters, from Janusz Piwowarski. -
adjacency_matrixnow models Bidirectional Graph. -
adjacency_listis now Serializable. -
Added
edges_size_typeandvertices_size_typetoadjacency_list_traits. -
Added
operator<etc. to `adjacency_list’s edge descriptor.
Bug fixes
-
Fixed a bug that caused the relaxed heap to fail on x86 Linux.
-
Bundled properties now work with adjacency list I/O.
-
floyd_warshall_all_pairs_shortest_pathsnow properly uses itscompare,inf, andzeroparameters. -
johnson_all_pairs_shortest_pathsnow supportscompare,combine,inf, andzero. -
Fixed a bug in
smallest_last_vertex_ordering.hppthat could cause a vertex to be moved to the wrong bucket during a bucket-sorter update.
Version 1.33.1
Bug fixes
-
fruchterman_reingold_force_directed_layout: fixed enumeration of grid-force pairs, which caused some odd graph formations along grid lines. -
king_orderingandcuthill_mckee_ordering: fixed a bug that caused failures with the multi-component version of these algorithms.
Version 1.33.0
New algorithms and components
-
Experimental Python bindings, from Doug Gregor and Indiana University.
-
floyd_warshall_all_pairs_shortest_paths, from Lauren Foutz and Scott Hill. -
astar_search, from Kristopher Beevers and Jufeng Peng. -
fruchterman_reingold_force_directed_layout, from Doug Gregor and Indiana University. -
biconnected_componentsandarticulation_points, from Indiana University. -
gursoy_atun_layout, from Jeremiah Willcock and Doug Gregor of Indiana University. -
king_ordering, from D. Kevin McGrath of Indiana University.
Enhancements
-
bellman_ford_shortest_pathsnow permits one to specify the starting vertex, so that it will perform its own initialization. -
undirected_dfsis now data-recursive, resulting in improved performance in some cases, from Synge Todo. -
dijkstra_shortest_pathsnow uses a relaxed heap [55] as its priority queue, improving its complexity to O(V log V) and improving real-world performance for larger graphs. -
read_graphviznow has a new, Spirit-based parser that works for all graph types and supports arbitrary properties on the graph, from Ron Garcia. The old, Bison-based GraphViz reader has been deprecated and was later removed. -
write_graphviznow supports output of dynamic properties (as read in through the newread_graphviz). -
cuthill_mckee_orderinghas been recast as an invocation ofbreadth_first_searchand now supports graphs with multiple components. -
subgraphnow supports bundled properties.get_propertynow refers to the subgraph property, not the root graph’s property. -
filtered_graphnow supports bundled properties. -
reverse_graphnow supports bundled properties,set_property, andget_property.
Bug fixes
-
bellman_ford_shortest_pathsnow deals with unreachable vertices better. -
adjacency_list: parallel edge removal withOutEdgeListS = listShas been fixed. Copying and swapping has been fixed. -
Incremental connected components: fixed a bug in the
incremental_componentsroutine that may have caused incorrect results. -
The
remove_out_edge_iffunction for an undirectedadjacency_listhas been rewritten and should no longer dereference singular iterators. -
write_graphviznow accepts avertex_idparameter that is used to name the nodes. -
read_graphviznow accepts empty attribute lists. -
sequential_vertex_coloringhas been updated, tested, and documented.