From 06f8e40a123c5988740972de7e5bebfd033945e7 Mon Sep 17 00:00:00 2001
From: Jeremiah Willcock
@@ -228,12 +231,21 @@ finish vertex u
- The graph object on which the algorithm will be applied. The type + The graph object on which the algorithm will be applied for astar_search(). The type VertexListGraph must be a model of the - Vertex List Graph concept. + Vertex List Graph and Incidence Graph + concepts. ++ +IN: const IncidenceGraph& g +
+ The graph object on which the algorithm will be applied for astar_search_no_init(). The type + IncidenceGraph must be a model of the + Incidence Graph + concept.IN: vertex_descriptor s diff --git a/doc/bibliography.html b/doc/bibliography.html index fb3bbb25..ef8ef626 100644 --- a/doc/bibliography.html +++ b/doc/bibliography.html @@ -409,7 +409,7 @@ PhD thesis, Cornell University, September 2003.
+
// named parameter version +template <class Graph, class P, class T, class R> +typename property_traits<typename property_map<Graph, edge_capacity_t>::const_type>::value_type +boykov_kolmogorov_max_flow(Graph& g, + typename graph_traits<Graph>::vertex_descriptor src, + typename graph_traits<Graph>::vertex_descriptor sink, + const bgl_named_params<P, T, R>& params = all defaults) + +// non-named parameter version +template <class Graph, class CapacityEdgeMap, class ResidualCapacityEdgeMap, class ReverseEdgeMap, + class PredecessorMap, class ColorMap, class DistanceMap, class IndexMap> +typename property_traits<CapacityEdgeMap>::value_type +boykov_kolmogorov_max_flow(Graph& g, + CapacityEdgeMap cap, + ResidualCapacityEdgeMap res_cap, + ReverseEdgeMap rev_map, + PredecessorMap pre_map, + ColorMap color, + DistanceMap dist, + IndexMap idx, + typename graph_traits <Graph>::vertex_descriptor src, + typename graph_traits <Graph >::vertex_descriptor sink)
+Additional overloaded versions for non-named parameters +are provided (without DistanceMap/ColorMap/DistanceMap; for those +iterator_property_maps with the provided index map are used)
+The boykov_kolmogorov_max_flow() function calculates the maximum +flow of a network. See Section Network +Flow Algorithms for a description of maximum flow. The calculated +maximum flow will be the return value of the function. The function +also calculates the flow values f(u,v) for all (u,v) in +E, which are returned in the form of the residual capacity +r(u,v) = c(u,v) - f(u,v). +
+Requirements:
The directed graph G=(V,E) that
+represents the network must include a reverse edge for every edge in
+E. That is, the input graph should be Gin =
+(V,{E U ET}). The ReverseEdgeMap argument rev
+must map each edge in the original graph to its reverse edge, that is
+(u,v) -> (v,u) for all (u,v) in E.
+
Remarks: While the push-relabel method states that each edge in ET +has to have capacity of 0, the reverse edges for this algorithm ARE +allowed to carry capacities. If there are already reverse edges in +the input Graph G, +those can be used. This can halve the amount of edges and will +noticeably increase the performance.
+ +
+Algorithm description:
The Boykov-Kolmogorov max-flow (or often
+BK max-flow) algorithm is a variety of the augmenting-path algorithm. Standard
+augmenting path algorithms find shortest paths from source to sink vertex and
+augment them by substracting the bottleneck capacity found on that path from the
+residual capacities of each edge and adding it to the total flow. Additionally
+the minimum capacity is added to the residual capacity of the reverse edges. If
+no more paths in the residual-edge tree are found, the algorithm terminates.
+Instead of finding a new shortest path from source to sink in the graph in each
+iteration, the Boykov-Kolmogorov algorithm keeps the already found paths as
+follows:
The algorithm builds up two search trees, a source-tree and a +sink-tree. Each vertex has a label (stored in ColorMap) to +which tree it belongs and a status-flag if this vertex is active or +passive. In the beginning of the algorithm only the source and the +sink are colored (source==black, sink==white) and have active status. +All other vertices are colored gray. The algorithm consists of three +phases:
+grow-phase: In this phase active vertices are allowed to +acquire neighbor vertices that are connected through an edge that has +a capacity-value greater than zero. Acquiring means that those vertices +become active and belong now to the search tree of the current +active vertex. If there are no more valid connections to neighbor +vertices, the current vertex becomes passive and the grow phase +continues with the next active vertex. The grow phase terminates if +there are no more active vertices left or a vertex discovers a vertex +from the other search tree through an unsaturated edge. In this case +a path from source to sink is found.
+augment-phase: This phase augments the path that was found +in the grow phase. First it finds the bottleneck capacity of the +found path, and then it updates the residual-capacity of the edges +from this path by substracting the bottleneck capacity from the +residual capacity. Furthermore the residual capacity of the reverse +edges are updated by adding the bottleneck capacity. This phase can +destroy the built up search trees, as it creates at least one +saturated edge. That means, that the search trees collapse to +forests, because a condition for the search trees is, that each +vertex in them has a valid (=non-saturated) connection to a terminal.
+adoption-phase: Here the search trees are reconstructed. A +simple solution would be to mark all vertices coming after the first +orphan in the found path free vertices (gray). A more sophisticated +solution is to give those orphans new parents: The neighbor vertices +are checked if they have a valid connection to the same terminal like +this vertex had (a path with unsaturated edges). If there is one, +this vertex becomes the new parent of the current orphan and this +forest is re-included into the search tree. If no new valid parent is +found, this vertex becomes a free vertex (marked gray), and it's +children become orphans. The adoption phase terminates if there are +no more orphans.
+
Details:
Marking heuristics: A timestamp is stored for each vertex + which shows in which iteration of the algorithm the distance to the + corresponding terminal was calculated. +
+This distance is used and gets calculated in the + adoption-phase. In order to find a valid new parent for an orphan, + the possible parent is checked for a connection to the terminal to + which tree it belongs. If there is such a connection, the path is + tagged with the current time-stamp, and the distance value. If + another orphan has to find a parent and it comes across a vertex + with a current timestamp, this information is used.
+The distance is also used in the grow-phase. If a vertex + comes across another vertex of the same tree while searching for + new vertices, the other's distance is compared to its distance. If + it is smaller, that other vertex becomes the new parent of the + current. This can decrease the length of the search paths, and so + amount of adoptions.
+Ordering of orphans: As described above, the augment-phase + and the adoption phase can create orphans. The orphans the + augment-phase generates, are ordered according to their distance to + the terminals (smallest first). This combined with the + distance/timestamp heuristics results in the possibility for not + having to recheck terminal-connections too often. New orphans which + are generated in adoption phase are processed before orphans from + the main queue for the same reason.
+
Implementation notes:
The algorithm is mainly implemented as described by Boykov and Kolmogorov in +[69]. An extended version +can be found in the PhD Thesis of Kolmogorov [68]. +The following changes are made to improve performance:
+boost/graph/boykov_kolmogorov_max_flow.hpp +
+IN: Graph& g +
+A directed graph. The graph's type must be a model of +Vertex List Graph, Edge +List Graph and Incidence Graph. +For each edge (u,v) in the graph, the reverse edge (v,u) +must also be in the graph. Performance of the algorithm will be slightly +improved if the graph type also models Adjacency +Matrix. ++
IN: vertex_descriptor src +
+The source vertex for the flow network graph. ++
IN: vertex_descriptor sink +
+The sink vertex for the flow network graph. ++
IN: edge_capacity(EdgeCapacityMap cap) +
+The edge capacity property map. The type must be a model +of a constant Lvalue +Property Map. The key type of the map must be the graph's edge +descriptor type.+
Default: get(edge_capacity, g) +
OUT: edge_residual_capacity(ResidualCapacityEdgeMap res) +
+The edge residual capacity property map. The type must be +a model of a mutable Lvalue +Property Map. The key type of the map must be the graph's edge +descriptor type.+
Default: get(edge_residual_capacity, +g) +
IN: edge_reverse(ReverseEdgeMap rev) +
+An edge property map that maps every edge (u,v) in +the graph to the reverse edge (v,u). The map must be a model +of constant Lvalue +Property Map. The key type of the map must be the graph's edge +descriptor type.+
Default: get(edge_reverse, g) +
UTIL: vertex_predecessor(PredecessorMap pre_map) +
+A vertex property map that stores the edge to the vertex' +predecessor. The map must be a model of mutable Lvalue +Property Map. The key type of the map must be the graph's vertex +descriptor type.+
Default: get(vertex_predecessor, g) +
OUT/UTIL: vertex_color(ColorMap color) +
+A vertex property map that stores a color for edge +vertex. If the color of a vertex after running the algorithm is black +the vertex belongs to the source tree else it belongs to the +sink-tree (used for minimum cuts). The map must be a model of mutable +Lvalue Property +Map. The key type of the map must be the graph's vertex +descriptor type.+
Default: get(vertex_color, g) +
UTIL: vertex_distance(DistanceMap dist) +
+A vertex property map that stores the distance to the +corresponding terminal. It's a utility-map for speeding up the +algorithm. The map must be a model of mutable Lvalue +Property Map. The key type of the map must be the graph's vertex +descriptor type.+
Default: get(vertex_distance, g) +
IN: vertex_index(VertexIndexMap index_map) +
+Maps each vertex of the graph to a unique integer in the +range [0, num_vertices(g)). The map must be a model of +constant LvaluePropertyMap. +The key type of the map must be the graph's vertex descriptor +type.+
Default: get(vertex_index, g) +
This reads an example maximum flow problem (a graph with edge +capacities) from a file in the DIMACS format (example/max_flow.dat). +The source for this example can be found in +example/boykov_kolmogorov-eg.cpp. +
+#include <boost/config.hpp>
+#include <iostream>
+#include <string>
+#include <boost/graph/adjacency_list.hpp>
+#include <boost/graph/boykov_kolmogorov_max_flow.hpp>
+#include <boost/graph/read_dimacs.hpp>
+#include <boost/graph/graph_utility.hpp>
+
+int
+main()
+{
+ using namespace boost;
+
+ typedef adjacency_list_traits < vecS, vecS, directedS > Traits;
+ typedef adjacency_list < vecS, vecS, directedS,
+ property < vertex_name_t, std::string,
+ property < vertex_index_t, long,
+ property < vertex_color_t, boost::default_color_type,
+ property < vertex_distance_t, long,
+ property < vertex_predecessor_t, Traits::edge_descriptor > > > > >,
+
+ property < edge_capacity_t, long,
+ property < edge_residual_capacity_t, long,
+ property < edge_reverse_t, Traits::edge_descriptor > > > > Graph;
+
+ Graph g;
+ property_map < Graph, edge_capacity_t >::type
+ capacity = get(edge_capacity, g);
+ property_map < Graph, edge_residual_capacity_t >::type
+ residual_capacity = get(edge_residual_capacity, g);
+ property_map < Graph, edge_reverse_t >::type rev = get(edge_reverse, g);
+ Traits::vertex_descriptor s, t;
+ read_dimacs_max_flow(g, capacity, rev, s, t);
+
+ std::vector<default_color_type> color(num_vertices(g));
+ std::vector<long> distance(num_vertices(g));
+ long flow = boykov_kolmogorov_max_flow(g ,s, t);
+
+ std::cout << "c The total flow:" << std::endl;
+ std::cout << "s " << flow << std::endl << std::endl;
+
+ std::cout << "c flow values:" << std::endl;
+ graph_traits < Graph >::vertex_iterator u_iter, u_end;
+ graph_traits < Graph >::out_edge_iterator ei, e_end;
+ for (tie(u_iter, u_end) = vertices(g); u_iter != u_end; ++u_iter)
+ for (tie(ei, e_end) = out_edges(*u_iter, g); ei != e_end; ++ei)
+ if (capacity[*ei] > 0)
+ std::cout << "f " << *u_iter << " " << target(*ei, g) << " "
+ << (capacity[*ei] - residual_capacity[*ei]) << std::endl;
+
+ return EXIT_SUCCESS;
+}+The output is: +
+c The total flow: +s 13 + +c flow values: +f 0 6 3 +f 0 1 0 +f 0 2 10 +f 1 5 1 +f 1 0 0 +f 1 3 0 +f 2 4 4 +f 2 3 6 +f 2 0 0 +f 3 7 5 +f 3 2 0 +f 3 1 1 +f 4 5 4 +f 4 6 0 +f 5 4 0 +f 5 7 5 +f 6 7 3 +f 6 4 0 +f 7 6 0 +f 7 5 0
+edmonds_karp_max_flow(), +push_relabel_max_flow(). +
+|
+ Copyright © 2006 + |
+
+ Stephan Diederich, University + Mannheim(diederich@ti.uni-manheim.de) + |
+
+
-// named paramter version +// named parameter version template <class Graph, class P, class T, class R> typename detail::edge_capacity_value<Graph, P, T, R>::value_type edmonds_karp_max_flow(Graph& g, @@ -76,7 +76,7 @@ the maximum flow problem. However, there are several reasons why this algorithm is not as good as the push_relabel_max_flow() or the kolmogorov_max_flow() +href="./boykov_kolmogorov_max_flow.html">boykov_kolmogorov_max_flow() algorithm.
Egrx`#${Dd3w6t?%(z2mcOF+i3e?R@817?wZ_fgoBmI>
zpDldg*JN$!+x!0*8}?1M{WjT-jpe|!>H~~(c7Ba^;5xEaquGw7WclM@!|AUb-YzzN
z{o4N0We4FiS^_f0{XqvsTMpQqwBc#7=T%vuqOGj3#j*de
The BGL interface does not appear as a single graph concept. Instead
-it is factored into much smaller peices. The reason for this is that
+it is factored into much smaller pieces. The reason for this is that
the purpose of a concept is to summarize the requirements for
particular algorithms. Any one algorithm does not need every
kind of graph operation, typically only a small subset. Furthermore,
@@ -224,7 +224,7 @@ vertex degee.
-We start at vertex , and first visit r and w (the two
-neighbors of ). Once both neighbors of are visited, we visit the
+We start at vertex s, and first visit r and w (the two
+neighbors of s). Once both neighbors of are visited, we visit the
neighbor of r (vertex v), then the neighbors of w
(the discovery order between r and w does not matter)
which are t and x. Finally we visit the neighbors of
diff --git a/doc/grid_graph.html b/doc/grid_graph.html
index 2ca9b71d..484cea1f 100644
--- a/doc/grid_graph.html
+++ b/doc/grid_graph.html
@@ -74,7 +74,7 @@
+ Requirements: Remarks: While the push-relabel method states that each edge in ET
has to have capacity of 0, the reverse edges for this algorithm ARE
@@ -155,7 +172,7 @@ no more orphans. Marking heuristics: A timestamp is stored for each vertex
which shows in which iteration of the algorithm the distance to the
- corresponding terminal was calculated.
+ corresponding terminal was calculated.
This distance is used and gets calculated in the
@@ -190,7 +207,7 @@ of Kolmogorov. Few changes were made for increasing performance: active vertices: Kolmogorov uses two lists for active nodes
and states that new active vertices are added to the rear of the
@@ -210,7 +227,7 @@ of Kolmogorov. Few changes were made for increasing performance: boost/graph/kolmogorov_max_flow.hpp
IN: Graph& g
+ IN: Graph& g
IN: vertex_descriptor src
+ IN: vertex_descriptor src
IN: vertex_descriptor sink
+ IN: vertex_descriptor sink
IN: edge_capacity(EdgeCapacityMap cap)
+ IN: edge_capacity(EdgeCapacityMap cap)
OUT: edge_residual_capacity(ResidualCapacityEdgeMap res)
+ OUT: edge_residual_capacity(ResidualCapacityEdgeMap res)
IN: edge_reverse(ReverseEdgeMap rev)
+ IN: edge_reverse(ReverseEdgeMap rev)
UTIL: vertex_predecessor(PredecessorMap pre_map)
+ UTIL: vertex_predecessor(PredecessorMap pre_map)
OUT/UTIL: vertex_color(ColorMap color)
+ OUT/UTIL: vertex_color(ColorMap color)
UTIL: vertex_distance(DistanceMap dist)
+ UTIL: vertex_distance(DistanceMap dist)
IN: vertex_index(VertexIndexMap index_map)
+ IN: vertex_index(VertexIndexMap index_map)
This reads an example maximum flow problem (a graph with edge
capacities) from a file in the DIMACS format (example/max_flow.dat).
The source for this example can be found in
-example/kolmogorov-eg.cpp.
+example/boykov_kolmogorov-eg.cpp.
-The output is:
+The output is:
@@ -92,7 +92,7 @@ version and fourth version require vertex
PropertyWriter,
respectively.
- The final two overloads of The two overloads of & params)
{
diff --git a/include/boost/graph/bandwidth.hpp b/include/boost/graph/bandwidth.hpp
index ea44b317..0bfeefb9 100644
--- a/include/boost/graph/bandwidth.hpp
+++ b/include/boost/graph/bandwidth.hpp
@@ -24,7 +24,7 @@ namespace boost {
typedef typename graph_traits
VertexListGraph refines
- IncidenceGraph and AdjacencyGraph
+ Graph
boost::graph_traits<G>::vertex_iterator
diff --git a/doc/graph_theory_review.html b/doc/graph_theory_review.html
index 81801e86..687315fb 100644
--- a/doc/graph_theory_review.html
+++ b/doc/graph_theory_review.html
@@ -356,8 +356,8 @@ Breadth-first search spreading through a graph.
Template Parameters
-template <typename std::size_t Dimensions,
+template <std::size_t Dimensions,
typename VertexIndex = std::size_t,
typename EdgeIndex = VertexIndex>
class grid_graph;
diff --git a/doc/history.html b/doc/history.html
index d89b35df..fbf34a73 100644
--- a/doc/history.html
+++ b/doc/history.html
@@ -84,7 +84,7 @@ September 27, 2000.
New algorithms and components
-
+
+
+
+
+
+
+
+ 
+ Warning! This header and its contents are deprecated and
+ will be removed in a future release. Please update your program to use
+ boykov_kolmogorov_max_flow
+ instead. Note that only the name of the algorithm has changed. The template
+ and function parameters will remain the same.
+
+kolmogorov_max_flow
// named parameter version
template <class Graph, class P, class T, class R>
typename property_traits<typename property_map<Graph, edge_capacity_t>::const_type>::value_type
-kolmogorov_max_flow(Graph& g,
+kolmogorov_max_flow(Graph& g,
typename graph_traits<Graph>::vertex_descriptor src,
typename graph_traits<Graph>::vertex_descriptor sink,
const bgl_named_params<P, T, R>& params = all defaults)
@@ -88,14 +105,14 @@ Flow Algorithms for a description of maximum flow. The calculated
maximum flow will be the return value of the function. The function
also calculates the flow values f(u,v) for all (u,v) in
E, which are returned in the form of the residual capacity
-r(u,v) = c(u,v) - f(u,v).
+r(u,v) = c(u,v) - f(u,v).
The directed graph G=(V,E) that
represents the network must include a reverse edge for every edge in
E. That is, the input graph should be Gin =
(V,{E U ET}). The ReverseEdgeMap argument rev
must map each edge in the original graph to its reverse edge, that is
-(u,v) -> (v,u) for all (u,v) in E.
+(u,v) -> (v,u) for all (u,v) in E.
Parameters
-A directed graph. The graph's type must be a model of
Vertex List Graph, Edge
@@ -220,46 +237,46 @@ must also be in the graph. Performance of the algorithm will be slightly
improved if the graph type also models Adjacency
Matrix.
-The source vertex for the flow network graph.
+
The source vertex for the flow network graph.
-The sink vertex for the flow network graph.
+
The sink vertex for the flow network graph.
Named Parameters
-The edge capacity property map. The type must be a model
of a constant Lvalue
Property Map. The key type of the map must be the graph's edge
-descriptor type.
-
Default: get(edge_capacity, g)
+descriptor type.
Default: get(edge_capacity, g)
The edge residual capacity property map. The type must be
a model of a mutable Lvalue
Property Map. The key type of the map must be the graph's edge
descriptor type.
-
Default: get(edge_residual_capacity,
-g)
+g)
An edge property map that maps every edge (u,v) in
the graph to the reverse edge (v,u). The map must be a model
of constant Lvalue
Property Map. The key type of the map must be the graph's edge
-descriptor type.
-
Default: get(edge_reverse, g)
+descriptor type.
Default: get(edge_reverse, g)
A vertex property map that stores the edge to the vertex'
predecessor. The map must be a model of mutable Lvalue
Property Map. The key type of the map must be the graph's vertex
descriptor type.
-
Default: get(vertex_predecessor, g)
A vertex property map that stores a color for edge
vertex. If the color of a vertex after running the algorithm is black
@@ -267,29 +284,29 @@ the vertex belongs to the source tree else it belongs to the
sink-tree (used for minimum cuts). The map must be a model of mutable
Lvalue Property
Map. The key type of the map must be the graph's vertex
-descriptor type.
-
Default: get(vertex_color, g)
+descriptor type.
Default: get(vertex_color, g)
A vertex property map that stores the distance to the
corresponding terminal. It's a utility-map for speeding up the
algorithm. The map must be a model of mutable Lvalue
Property Map. The key type of the map must be the graph's vertex
-descriptor type.
-
Default: get(vertex_distance, g)
+descriptor type.
Default: get(vertex_distance, g)
Maps each vertex of the graph to a unique integer in the
range [0, num_vertices(g)). The map must be a model of
constant LvaluePropertyMap.
The key type of the map must be the graph's vertex descriptor
-type.
Default: get(vertex_index, g)
+type.
Default: get(vertex_index, g)
Example
#include <boost/config.hpp>
#include <iostream>
@@ -311,11 +328,11 @@ main()
property < vertex_color_t, boost::default_color_type,
property < vertex_distance_t, long,
property < vertex_predecessor_t, Traits::edge_descriptor > > > > >,
-
+
property < edge_capacity_t, long,
property < edge_residual_capacity_t, long,
property < edge_reverse_t, Traits::edge_descriptor > > > > Graph;
-
+
Graph g;
property_map < Graph, edge_capacity_t >::type
capacity = get(edge_capacity, g);
@@ -343,7 +360,7 @@ main()
return EXIT_SUCCESS;
}c The total flow:
s 13
diff --git a/doc/push_relabel_max_flow.html b/doc/push_relabel_max_flow.html
index 45dc6db8..4fcab20a 100644
--- a/doc/push_relabel_max_flow.html
+++ b/doc/push_relabel_max_flow.html
@@ -226,7 +226,7 @@ f 6 7 1
See Also
edmonds_karp_max_flow()
-kolmogorov_max_flow().
+boykov_kolmogorov_max_flow().
diff --git a/doc/quick_tour.html b/doc/quick_tour.html
index c95fae84..5ae9ffe9 100644
--- a/doc/quick_tour.html
+++ b/doc/quick_tour.html
@@ -445,7 +445,7 @@ of iterators (a pointer qualifies as a edmonds_karp_max_flow
write_graphviz will emit
+write_graphviz_dp will emit
all of the properties stored in the dynamic_properties
object, thereby retaining the properties that have been read in
@@ -329,10 +329,6 @@ href="../example/graphviz.cpp">example using
read_graphviz
-Notes
-Note that you can use Graphviz dot file write facilities
-without the library libbglviz.a.
-
diff --git a/example/Jamfile.v2 b/example/Jamfile.v2
index 5a0ad7e2..48dcc1ae 100644
--- a/example/Jamfile.v2
+++ b/example/Jamfile.v2
@@ -22,3 +22,8 @@ exe mcgregor_subgraphs_example : mcgregor_subgraphs_example.cpp ;
exe grid_graph_example : grid_graph_example.cpp ;
exe bipartite_example : bipartite_example.cpp ;
exe fr_layout : fr_layout.cpp ;
+exe canonical_ordering : canonical_ordering.cpp ;
+exe components_on_edgelist : components_on_edgelist.cpp ;
+exe boykov_kolmogorov-eg : boykov_kolmogorov-eg.cpp ;
+exe ospf-example : ospf-example.cpp ../build//boost_graph ;
+# exe cc-internet : cc-internet.cpp ../build//boost_graph ;
diff --git a/example/accum-compile-times.cpp b/example/accum-compile-times.cpp
index 0cc66b60..385d86c9 100644
--- a/example/accum-compile-times.cpp
+++ b/example/accum-compile-times.cpp
@@ -85,14 +85,14 @@ main()
std::ifstream name_in("makefile-target-names.dat");
std::ifstream compile_cost_in("target-compile-costs.dat");
graph_traits < file_dep_graph2 >::vertex_iterator vi, vi_end;
- for (tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi) {
+ for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi) {
name_in >> name_map[*vi];
compile_cost_in >> compile_cost_map[*vi];
}
graph_property_iter_range < file_dep_graph2,
vertex_compile_cost_t >::iterator ci, ci_end;
- tie(ci, ci_end) = get_property_iter_range(g, vertex_compile_cost);
+ boost::tie(ci, ci_end) = get_property_iter_range(g, vertex_compile_cost);
std::cout << "total (sequential) compile time: "
<< std::accumulate(ci, ci_end, 0.0) << std::endl;
diff --git a/example/astar-cities.cpp b/example/astar-cities.cpp
index a2a11544..d5affd11 100644
--- a/example/astar-cities.cpp
+++ b/example/astar-cities.cpp
@@ -164,8 +164,8 @@ int main(int argc, char **argv)
WeightMap weightmap = get(edge_weight, g);
for(std::size_t j = 0; j < num_edges; ++j) {
edge_descriptor e; bool inserted;
- tie(e, inserted) = add_edge(edge_array[j].first,
- edge_array[j].second, g);
+ boost::tie(e, inserted) = add_edge(edge_array[j].first,
+ edge_array[j].second, g);
weightmap[e] = weights[j];
}
diff --git a/example/bellman-example.cpp b/example/bellman-example.cpp
index 4e0b27d3..e6ec8750 100644
--- a/example/bellman-example.cpp
+++ b/example/bellman-example.cpp
@@ -74,7 +74,7 @@ main()
property_map
+#include