demo/grid_ugraph_demo.cc
changeset 2013 02e70e25aac5
child 2172 4b25e7003868
equal deleted inserted replaced
-1:000000000000 0:648975a6247b
       
     1 /* -*- C++ -*-
       
     2  *
       
     3  * This file is a part of LEMON, a generic C++ optimization library
       
     4  *
       
     5  * Copyright (C) 2003-2006
       
     6  * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
       
     7  * (Egervary Research Group on Combinatorial Optimization, EGRES).
       
     8  *
       
     9  * Permission to use, modify and distribute this software is granted
       
    10  * provided that this copyright notice appears in all copies. For
       
    11  * precise terms see the accompanying LICENSE file.
       
    12  *
       
    13  * This software is provided "AS IS" with no warranty of any kind,
       
    14  * express or implied, and with no claim as to its suitability for any
       
    15  * purpose.
       
    16  *
       
    17  */
       
    18 
       
    19 #include <lemon/grid_ugraph.h>
       
    20 #include <lemon/graph_adaptor.h>
       
    21 #include <lemon/graph_to_eps.h>
       
    22 #include <lemon/bfs.h>
       
    23 #include <lemon/xy.h>
       
    24 
       
    25 #include <iostream>
       
    26 #include <fstream>
       
    27 
       
    28 ///\ingroup demos
       
    29 ///\file
       
    30 ///\brief Labirinth example with grid ugraph.
       
    31 ///
       
    32 ///  Labirinth example with grid ugraph.
       
    33 ///
       
    34 /// The input file is:
       
    35 ///
       
    36 /// \include grid_ugraph_demo.in
       
    37 ///
       
    38 /// The result:
       
    39 ///
       
    40 /// \image html grid_ugraph_demo.png
       
    41 /// \image latex grid_ugraph_demo.eps "The labirinth" width=\textwidth
       
    42 ///
       
    43 /// The source:
       
    44 ///
       
    45 /// \include grid_ugraph_demo.cc
       
    46 
       
    47 using namespace lemon;
       
    48 using namespace std;
       
    49 
       
    50 int main() {
       
    51   ifstream in("grid_ugraph_demo.in");
       
    52   int width, height;
       
    53   in >> width >> height;
       
    54   int start_x, start_y;
       
    55   in >> start_x >> start_y;
       
    56   int stop_x, stop_y;
       
    57   in >> stop_x >> stop_y;
       
    58 
       
    59   GridUGraph ugraph(width, height);
       
    60   GridUGraph::Node start = ugraph(start_x - 1, start_y - 1);
       
    61   GridUGraph::Node stop = ugraph(stop_x - 1, stop_y - 1);
       
    62   GridUGraph::NodeMap<bool> filter(ugraph);
       
    63 
       
    64   for (int j = 0; j < height; ++j) {
       
    65     in >> ws;
       
    66     for (int i = 0; i < width; ++i) {
       
    67       char c; in >> c;
       
    68       filter[ugraph(i, j)] = (c == '.');
       
    69     }
       
    70   }
       
    71 
       
    72   typedef NodeSubGraphAdaptor<GridUGraph,
       
    73     GridUGraph::NodeMap<bool> > FilteredGraph;
       
    74 
       
    75   FilteredGraph filtered(ugraph, filter);
       
    76 
       
    77   Bfs<FilteredGraph> bfs(filtered);
       
    78   std::cout << "The length of shortest path: " << 
       
    79     bfs.run(start, stop) << std::endl;
       
    80 
       
    81   FilteredGraph::EdgeMap<bool> path(filtered, false);
       
    82   
       
    83   for (GridUGraph::Node node = stop; 
       
    84        node != start; node = bfs.predNode(node)) {
       
    85     path[bfs.predEdge(node)] = true;
       
    86   }
       
    87   
       
    88   graphToEps(filtered, "grid_ugraph_demo.eps").scaleToA4().
       
    89     title("Grid ugraph").
       
    90     copyright("(C) 2006 LEMON Project").
       
    91     coords(scaleMap(indexMap(ugraph), 10)).
       
    92     enableParallel().
       
    93     nodeScale(0.5).
       
    94     drawArrows().
       
    95     edgeColors(composeMap(ColorSet(), path)).
       
    96     run();
       
    97   
       
    98   std::cout << "The shortest path is written to grid_ugraph_demo.eps" 
       
    99 	    << std::endl;
       
   100 
       
   101   return 0;
       
   102 }