Location: LEMON/LEMON-official/demo/circulation_demo.cc - annotation
Load file history
Port Circulation from svn -r3516 (#175)
Namely,
- port the files
- apply the migrate script
- apply the unify script
- fix the compilation
- strip the demo input file
- break long lines
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e r414:5a7dbeaed70e | /* -*- mode: C++; indent-tabs-mode: nil; -*-
*
* This file is a part of LEMON, a generic C++ optimization library.
*
* Copyright (C) 2003-2008
* Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
* (Egervary Research Group on Combinatorial Optimization, EGRES).
*
* Permission to use, modify and distribute this software is granted
* provided that this copyright notice appears in all copies. For
* precise terms see the accompanying LICENSE file.
*
* This software is provided "AS IS" with no warranty of any kind,
* express or implied, and with no claim as to its suitability for any
* purpose.
*
*/
///\ingroup demos
///\file
///\brief Demonstrating the usage of LEMON's General Flow algorithm
///
/// This demo program reads a general network circulation problem from the
/// file 'circulation-input.lgf', runs the preflow based algorithm for
/// finding a feasible solution and writes the output
/// to 'circulation-input.lgf'
///
/// \include circulation_demo.cc
#include <iostream>
#include <lemon/list_graph.h>
#include <lemon/circulation.h>
#include <lemon/lgf_reader.h>
#include <lemon/lgf_writer.h>
using namespace lemon;
int main (int, char*[])
{
typedef ListDigraph Digraph;
typedef Digraph::Node Node;
typedef Digraph::NodeIt NodeIt;
typedef Digraph::Arc Arc;
typedef Digraph::ArcIt ArcIt;
typedef Digraph::ArcMap<int> ArcMap;
typedef Digraph::NodeMap<int> NodeMap;
typedef Digraph::NodeMap<double> DNodeMap;
Digraph g;
ArcMap lo(g);
ArcMap up(g);
NodeMap delta(g);
NodeMap nid(g);
ArcMap eid(g);
DNodeMap cx(g);
DNodeMap cy(g);
DigraphReader<Digraph>(g,"circulation-input.lgf").
arcMap("lo_cap", lo).
arcMap("up_cap", up).
nodeMap("delta", delta).
arcMap("label", eid).
nodeMap("label", nid).
nodeMap("coordinates_x", cx).
nodeMap("coordinates_y", cy).
run();
Circulation<Digraph> gen(g,lo,up,delta);
bool ret=gen.run();
if(ret)
{
std::cout << "\nA feasible flow has been found.\n";
if(!gen.checkFlow()) std::cerr << "Oops!!!\n";
DigraphWriter<Digraph>(g, "circulation-output.lgf").
arcMap("lo_cap", lo).
arcMap("up_cap", up).
arcMap("flow", gen.flowMap()).
nodeMap("delta", delta).
arcMap("label", eid).
nodeMap("label", nid).
nodeMap("coordinates_x", cx).
nodeMap("coordinates_y", cy).
run();
}
else {
std::cout << "\nThere is no such a flow\n";
Digraph::NodeMap<int> bar(g);
gen.barrierMap(bar);
if(!gen.checkBarrier()) std::cerr << "Dual Oops!!!\n";
DigraphWriter<Digraph>(g, "circulation-output.lgf").
arcMap("lo_cap", lo).
arcMap("up_cap", up).
nodeMap("barrier", bar).
nodeMap("delta", delta).
arcMap("label", eid).
nodeMap("label", nid).
nodeMap("coordinates_x", cx).
nodeMap("coordinates_y", cy).
run();
}
std::cout << "The output is written to file 'circulation-output.lgf'\n\n";
}
|