1 | /** |
---|
2 | |
---|
3 | \page quicktour Quick Tour to LEMON |
---|
4 | |
---|
5 | Let us first answer the question <b>"What do I want to use LEMON for?" |
---|
6 | </b>. |
---|
7 | LEMON is a C++ library, so you can use it if you want to write C++ |
---|
8 | programs. What kind of tasks does the library LEMON help to solve? |
---|
9 | It helps to write programs that solve optimization problems that arise |
---|
10 | frequently when <b>designing and testing certain networks</b>, for example |
---|
11 | in telecommunication, computer networks, and other areas that I cannot |
---|
12 | think of now. A very natural way of modelling these networks is by means |
---|
13 | of a <b> graph</b> (we will always mean a directed graph by that). |
---|
14 | So if you want to write a program that works with |
---|
15 | graphs then you might find it useful to use our library LEMON. |
---|
16 | |
---|
17 | |
---|
18 | |
---|
19 | Some examples are the following: |
---|
20 | |
---|
21 | - First we give two examples that show how to instantiate a graph. The |
---|
22 | first one shows the methods that add nodes and edges, but one will |
---|
23 | usually use the second way which reads a graph from a stream (file). |
---|
24 | |
---|
25 | |
---|
26 | -# The following code fragment shows how to fill a graph with data. |
---|
27 | |
---|
28 | \code |
---|
29 | |
---|
30 | typedef ListGraph Graph; |
---|
31 | typedef Graph::Edge Edge; |
---|
32 | typedef Graph::InEdgeIt InEdgeIt; |
---|
33 | typedef Graph::OutEdgeIt OutEdgeIt; |
---|
34 | typedef Graph::EdgeIt EdgeIt; |
---|
35 | typedef Graph::Node Node; |
---|
36 | typedef Graph::NodeIt NodeIt; |
---|
37 | |
---|
38 | Graph g; |
---|
39 | |
---|
40 | for (int i = 0; i < 3; i++) |
---|
41 | g.addNode(); |
---|
42 | |
---|
43 | for (NodeIt i(g); i!=INVALID; ++i) |
---|
44 | for (NodeIt j(g); j!=INVALID; ++j) |
---|
45 | if (i != j) g.addEdge(i, j); |
---|
46 | |
---|
47 | \endcode |
---|
48 | |
---|
49 | -# |
---|
50 | |
---|
51 | - If you want to solve some transportation problems in a network then |
---|
52 | you will want to find shortest paths between nodes of a graph. This is |
---|
53 | usually solved using Dijkstra's algorithm. A utility |
---|
54 | that solves this is the \ref lemon::Dijkstra "LEMON Dijkstra class". |
---|
55 | A simple program using the \ref lemon::Dijkstra "LEMON Dijkstra class" is |
---|
56 | as follows (we assume that the graph is already given in the memory): |
---|
57 | |
---|
58 | \code |
---|
59 | |
---|
60 | \endcode |
---|
61 | |
---|
62 | - If you want to design a network and want to minimize the total length |
---|
63 | of wires then you might be looking for a <b>minimum spanning tree</b> in |
---|
64 | an undirected graph. This can be found using the Kruskal algorithm: the |
---|
65 | class \ref lemon::Kruskal "LEMON Kruskal class" does this job for you. |
---|
66 | The following code fragment shows an example: |
---|
67 | |
---|
68 | \code |
---|
69 | |
---|
70 | \endcode |
---|
71 | |
---|
72 | |
---|
73 | |
---|
74 | Some more detailed introduction can be obtained by following the links |
---|
75 | below: |
---|
76 | |
---|
77 | \ref graphs "Graph structures" |
---|
78 | play a central role in LEMON, so if you are new to the library, |
---|
79 | you probably should start \ref graphs "here". |
---|
80 | (You can also find that page along with others under |
---|
81 | <a class="el" href="pages.html"> Related Pages </a>.) |
---|
82 | |
---|
83 | If you are |
---|
84 | interested in data structures and algorithms in more details, then |
---|
85 | you should browse the reference manual part of the documentation. |
---|
86 | Section <a class="el" href="modules.html"> Modules </a> |
---|
87 | is a good starting point for this. |
---|
88 | */ |
---|