source:lemon-tutorial/getting_started.dox@12:d64ffbd7d8c6

Last change on this file since 12:d64ffbd7d8c6 was 12:d64ffbd7d8c6, checked in by Alpar Juttner <alpar@…>, 12 years ago

Merge

File size: 4.0 KB
Line
1/* -*- mode: C++; indent-tabs-mode: nil; -*-
2 *
3 * This file is a part of LEMON, a generic C++ optimization library.
4 *
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
19namespace lemon {
20/**
22
23First of all you have to install LEMON on your system (see
24\ref install for instructions).
25After that you can paste the following code segment into a file
26<tt>hello_lemon.cc</tt> to have a first working program that uses LEMON.
27
28\dontinclude hello_lemon.cc
29\skip #include
30\until }
31
32First let us briefly explain how this example program works.
33(The used notions will be discussed in detail in the following sections.)
34
35After some convenience typedefs we create a directed graph (\e digraph)
36and add some nodes and arcs to it.
37ListDigraph is one of the digraph classes implemented in LEMON.
38It is based on linked lists, therefore iterating through its nodes and
39arcs is fast.
40
41Then we iterate through all nodes of the digraph and print their unique
42IDs. We use a constructor of the node iterator to initialize it to the
43first node.
44The <tt>operator++</tt> is used to step to the next node. After the last
45node the iterator becomes invalid (i.e. it is set to \c INVALID).
46This is what we exploit in the stop condition.
47We iterate through all arcs of the digraph very similarly and print the
48IDs of their source (tail) and target (head) nodes using the \c source()
49and \c target() member functions.
50
51After that we create an arc map, which is actually a mapping that assigns
52an \c int value (length) to each arc, and we set this value for each arc.
53Finally we iterate through all arcs again and print their lengths.
54
55Now let us compile this simple example program.
56
57[SEC]hello_lemon_system[SEC] If LEMON is Installed System-Wide
58
59If LEMON is installed system-wide (into directory \c /usr/local),
60then it is very easy to compile this program with the
61following command (the argument <tt>-lemon</tt> tells the compiler
62that we are using the installed LEMON):
63
64\verbatim
65g++ -lemon hello_lemon.cc -o hello_lemon
66\endverbatim
67
68As a result you will get the exacutable \c hello_lemon in the current
69directory, which you can run by the following command.
70
71\verbatim
72./hello_lemon
73\endverbatim
74
75[SEC]hello_lemon_user[SEC] If LEMON is Installed User-Local
76
77Compiling the code is a bit more difficult if you installed LEMON
78user-local into a directory (e.g. <tt>~/lemon</tt>) or if you just
79skipped the step <tt>make install</tt>.
80You have to issue a command like this.
81
82\verbatim
83g++ -lemon -I ~/lemon -L ~/lemon/lemon/.libs hello_lemon.cc -o hello_lemon
84\endverbatim
85
86If everything has gone well, then our program prints out the followings.
87
88\verbatim
89Hello World!
90This is LEMON library here. We have a direceted graph.
91
92Nodes: 3 2 1 0
93Arcs: (2,3) (1,3) (1,2) (0,2) (0,1)
94
95There is a map on the arcs (length):
96
97length(2,3)=10
98length(1,3)=25
99length(1,2)=5
100length(0,2)=20
101length(0,1)=10
102\endverbatim
103
104You may note that iterating through the nodes and arcs is done in the
105reverse order compared to the creating order (the IDs are in decreasing
106order).
107This is due to implementation aspects, that may differ at other graph
108types, moreover it may be changed in the next releases.
109Thus you should not exploit this method in any way, you should not
110suppose anything about the iteration order.
111
112If you managed to compile and run this example code without any problems,
113you can go on reading this tutorial to get to know more features and tools
114of LEMON.
115Otherwise if you encountered problems that you did not manage to solve,
116do not hesitate to