diff --git a/demo/lgf_demo.cc b/demo/lgf_demo.cc new file mode 100644 --- /dev/null +++ b/demo/lgf_demo.cc @@ -0,0 +1,153 @@ +/* -*- C++ -*- + * + * 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 graph input and output +/// +/// This simple demo program gives an example of how to read and write +/// a graph and additional maps (on the nodes or the edges) from/to a +/// stream. +/// +/// \include reader_writer_demo.cc + +#include +#include +#include +#include +#include + + +using namespace lemon; + +int main(int argc, const char *argv[]) { + const int n = argc > 1 ? std::atoi(argv[1]) : 20; + const int e = argc > 2 ? std::atoi(argv[2]) : static_cast(n * log(n)); + const int m = argc > 3 ? std::atoi(argv[3]) : 100; + + SmartDigraph digraph; + + std::stringstream ss; + + try { + + typedef SmartDigraph Digraph; + typedef Digraph::Node Node; + typedef Digraph::Arc Arc; + typedef Digraph::ArcIt ArcIt; + + typedef Digraph::NodeMap PotentialMap; + typedef Digraph::ArcMap CapacityMap; + typedef Digraph::ArcMap NameMap; + + Digraph digraph; + PotentialMap potential(digraph); + CapacityMap capacity(digraph); + NameMap name(digraph); + + std::vector nodes; + for (int i = 0; i < n; ++i) { + Node node = digraph.addNode(); + potential[node] = rnd[m]; + nodes.push_back(node); + } + + std::vector arcs; + for (int i = 0; i < e; ++i) { + int s = rnd[n]; + int t = rnd[n]; + int c = rnd[m]; + Arc arc = digraph.addArc(nodes[s], nodes[t]); + capacity[arc] = c; + std::ostringstream os; + os << "arc \t" << i << std::endl; + name[arc] = os.str(); + arcs.push_back(arc); + } + + + DigraphWriter(ss, digraph). + nodeMap("potential", potential). + arcMap("capacity", capacity). + arcMap("name", name). + node("source", nodes[0]). + node("target", nodes[1]). + arc("bottleneck", arcs[e / 2]). + attribute("creator", "lemon library"). + run(); + + } catch (DataFormatError& error) { + std::cerr << error.what() << std::endl; + } + + try { + + typedef SmartDigraph Digraph; + typedef Digraph::Node Node; + typedef Digraph::Arc Arc; + typedef Digraph::ArcIt ArcIt; + + typedef Digraph::NodeMap LabelMap; + typedef Digraph::NodeMap PotentialMap; + typedef Digraph::ArcMap CapacityMap; + typedef Digraph::ArcMap NameMap; + + Digraph digraph; + LabelMap label(digraph); + PotentialMap potential(digraph); + CapacityMap capacity(digraph); + NameMap name(digraph); + + Node s, t; + Arc a; + + std::string creator; + + for (int i = 0; i < n; ++i) { + Node node = digraph.addNode(); + label[node] = i; + } + + DigraphReader(ss, digraph). + useNodes(label). + nodeMap("potential", potential). + arcMap("capacity", capacity). + arcMap("name", name). + node("source", s). + node("target", t). + arc("bottleneck", a). + attribute("creator", creator). + run(); + + DigraphWriter(std::cout, digraph). + nodeMap("potential", potential). + arcMap("capacity", capacity). + arcMap("name", name). + node("source", s). + node("target", t). + arc("bottleneck", a). + attribute("creator", creator). + run(); + + } catch (DataFormatError& error) { + std::cerr << error.what() << std::endl; + } + + + return 0; +}