diff -r 2f3f87afb1d2 -r 7477e00f1a64 src/work/marci/sub_graph_wrapper_demo.cc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/work/marci/sub_graph_wrapper_demo.cc Thu Sep 16 13:57:41 2004 +0000 @@ -0,0 +1,71 @@ +// -*- c++ -*- + +// Use a DIMACS max flow file as stdin. +// sub_graph_wrapper_demo < dimacs_max_flow_file + +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +using namespace hugo; + +using std::cout; +using std::endl; + +int main() +{ + typedef SmartGraph Graph; + + typedef Graph::Edge Edge; + typedef Graph::Node Node; + typedef Graph::EdgeIt EdgeIt; + typedef Graph::NodeIt NodeIt; + typedef Graph::EdgeMap LengthMap; + + Graph g; + Node s, t; + LengthMap length(g); + + readDimacs(std::cin, g, length, s, t); + + cout << "edges with lengths (of form tail--length->head): " << endl; + for(EdgeIt e(g); e!=INVALID; ++e) + cout << " " << g.id(g.tail(e)) << "--" + << length[e] << "->" << g.id(g.head(e)) << endl; + + cout << "s: " << g.id(s) << " t: " << g.id(t) << endl; + + typedef Dijkstra Dijkstra; + Dijkstra dijkstra(g, length); + dijkstra.run(s); + + typedef TightEdgeFilterMap + TightEdgeFilter; + TightEdgeFilter tight_edge_filter(g, dijkstra.distMap(), length); + + ConstMap const_true_map(true); + typedef SubGraphWrapper, TightEdgeFilter> SubGW; + SubGW gw(g, const_true_map, tight_edge_filter); + + ConstMap const_1_map(1); + Graph::EdgeMap flow(g, 0); + Preflow, Graph::EdgeMap > + preflow(gw, s, t, const_1_map, flow); + preflow.run(); + + cout << "edges of the maximum number of edge-disjoint shortest s-t paths: " + << endl; + for(EdgeIt e(g); e!=INVALID; ++e) + if (flow[e]) + cout << " " << g.id(g.tail(e)) << "--" + << length[e] << "->" << g.id(g.head(e)) << endl; + + return 0; +}