| 1 | #include <fstream>
|
|---|
| 2 | #include <boost/graph/adjacency_list.hpp>
|
|---|
| 3 | #include <boost/graph/graph_traits.hpp>
|
|---|
| 4 | #include <boost/graph/properties.hpp>
|
|---|
| 5 | #include <boost/graph/boykov_kolmogorov_max_flow.hpp>
|
|---|
| 6 | #include <boost/graph/push_relabel_max_flow.hpp>
|
|---|
| 7 | #include <boost/graph/read_dimacs.hpp>
|
|---|
| 8 |
|
|---|
| 9 | typedef int FlowValue;
|
|---|
| 10 |
|
|---|
| 11 | int main (int argc, char **argv) {
|
|---|
| 12 | using namespace boost;
|
|---|
| 13 | typedef adjacency_list_traits <vecS, vecS, directedS> Traits;
|
|---|
| 14 | typedef adjacency_list <vecS, vecS, directedS,
|
|---|
| 15 | property <vertex_predecessor_t, Traits::edge_descriptor,
|
|---|
| 16 | property <vertex_color_t, default_color_type,
|
|---|
| 17 | property <vertex_distance_t, size_t> > >,
|
|---|
| 18 |
|
|---|
| 19 | property <edge_capacity_t, FlowValue,
|
|---|
| 20 | property <edge_residual_capacity_t, FlowValue,
|
|---|
| 21 | property <edge_reverse_t, Traits::edge_descriptor > > > > Graph;
|
|---|
| 22 |
|
|---|
| 23 | typedef Graph::vertex_descriptor Vertex;
|
|---|
| 24 |
|
|---|
| 25 | if (argc != 2) {
|
|---|
| 26 | std::cout << "Usage: test-flow infile.dimacs\n";
|
|---|
| 27 | exit(-1);
|
|---|
| 28 | }
|
|---|
| 29 |
|
|---|
| 30 | std::ifstream infile(argv[1]);
|
|---|
| 31 |
|
|---|
| 32 | Graph g;
|
|---|
| 33 | Vertex s, t;
|
|---|
| 34 |
|
|---|
| 35 | read_dimacs_max_flow(g, boost::get(edge_capacity, g), boost::get(edge_reverse, g), s, t, infile);
|
|---|
| 36 |
|
|---|
| 37 | FlowValue flow = boykov_kolmogorov_max_flow(g, s, t);
|
|---|
| 38 | std::cout << "BK flow: " << flow << "\n";
|
|---|
| 39 | flow = push_relabel_max_flow(g, s, t);
|
|---|
| 40 | std::cout << "PR flow: " << flow << "\n";
|
|---|
| 41 | }
|
|---|