Changeset 16:ed4c8506e151 in lemon-tutorial
- Timestamp:
- 11/03/08 23:46:30 (16 years ago)
- Branch:
- default
- Phase:
- public
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
demo/hello_lemon.cc
r5 r16 18 18 19 19 ///\file 20 ///\brief Demonstrating the basic concepts and fetures of LEMON20 ///\brief Simple "Hello World!" program for LEMON. 21 21 /// 22 /// This program is intended to be a "Hello World!" program that shows 23 /// the very basic notions of LEMON: \ref graphs "graphs" and 24 /// \ref maps "maps". 25 /// 22 /// Simple "Hello World!" program for LEMON. 26 23 /// \include hello_lemon.cc 27 24 … … 31 28 int main() 32 29 { 33 // Convenience type definitions 34 typedef lemon::ListDigraph Digraph; 35 typedef Digraph::Node Node; 36 typedef Digraph::Arc Arc; 37 typedef Digraph::NodeIt NodeIt; 38 typedef Digraph::ArcIt ArcIt; 39 typedef Digraph::ArcMap<int> LengthMap; 40 using lemon::INVALID; 30 typedef lemon::ListDigraph Graph; 31 Graph g; 41 32 42 // Create a directed graph 43 Digraph g; 33 Graph::Node u = g.addNode(); 34 Graph::Node v = g.addNode(); 35 Graph::Arc e = g.addArc(u, v); 44 36 45 // Add nodes to the digraph 46 Node v1 = g.addNode(); 47 Node v2 = g.addNode(); 48 Node v3 = g.addNode(); 49 Node v4 = g.addNode(); 50 51 // Add arcs to the digraph 52 Arc v1_v2 = g.addArc(v1, v2); 53 Arc v1_v3 = g.addArc(v1, v3); 54 Arc v2_v3 = g.addArc(v2, v3); 55 Arc v2_v4 = g.addArc(v2, v4); 56 Arc v3_v4 = g.addArc(v3, v4); 57 58 // Create an arc map (length) 59 LengthMap length(g); 60 61 // Set the length of each arc 62 length[v1_v2] = 10; 63 length[v1_v3] = 20; 64 length[v2_v3] = 5; 65 length[v2_v4] = 25; 66 length[v3_v4] = 10; 67 68 // Welcome message 69 std::cout << "Hello World!" << std::endl; 70 std::cout << "This is LEMON library here. We have a direceted graph."; 71 std::cout << std::endl << std::endl; 72 73 // Iterate through the nodes and print their IDs 74 std::cout << "Nodes:"; 75 for (NodeIt n(g); n != INVALID; ++n) 76 std::cout << " " << g.id(n); 77 std::cout << std::endl; 78 79 // Iterate through the arcs and print the IDs of their 80 // source and target nodes 81 std::cout << "Arcs:"; 82 for (ArcIt a(g); a != INVALID; ++a) 83 std::cout << " (" << g.id(g.source(a)) << "," 84 << g.id(g.target(a)) << ")"; 85 std::cout << std::endl << std::endl; 86 87 // Iterate through the arcs and print their length 88 std::cout << "There is a map on the arcs (length):" << std::endl; 89 std::cout << std::endl; 90 for (ArcIt a(g); a != INVALID; ++a) 91 std::cout << "length(" << g.id(g.source(a)) << "," 92 << g.id(g.target(a)) << ")=" << length[a] << std::endl; 93 std::cout << std::endl; 37 std::cout << "Hello World! This is LEMON library here." << std::endl; 38 std::cout << "We have a directed graph with " 39 << countNodes(g) << " nodes and " 40 << countArcs(g) << " arc." << std::endl; 94 41 95 42 return 0; -
getting_started.dox
r12 r16 30 30 \until } 31 31 32 First let us briefly explain how this example program works. 33 (The used notions will be discussed in detail in the following sections.) 32 In this small example a directed graph is created with two nodes and 33 an arc added to it. 34 34 35 After some convenience typedefs we create a directed graph (\e digraph) 36 and add some nodes and arcs to it. 37 ListDigraph is one of the digraph classes implemented in LEMON. 38 It is based on linked lists, therefore iterating through its nodes and 39 arcs is fast. 35 Now let us compile this code. 36 (We suppose that you have it in a file called <tt>hello_lemon.cc</tt>.) 40 37 41 Then we iterate through all nodes of the digraph and print their unique 42 IDs. We use a constructor of the node iterator to initialize it to the 43 first node. 44 The <tt>operator++</tt> is used to step to the next node. After the last 45 node the iterator becomes invalid (i.e. it is set to \c INVALID). 46 This is what we exploit in the stop condition. 47 We iterate through all arcs of the digraph very similarly and print the 48 IDs of their source (tail) and target (head) nodes using the \c source() 49 and \c target() member functions. 50 51 After that we create an arc map, which is actually a mapping that assigns 52 an \c int value (length) to each arc, and we set this value for each arc. 53 Finally we iterate through all arcs again and print their lengths. 54 55 Now let us compile this simple example program. 56 57 [SEC]hello_lemon_system[SEC] If LEMON is Installed System-Wide 58 59 If LEMON is installed system-wide (into directory \c /usr/local), 38 If LEMON is installed <b>system-wide</b> (into directory \c /usr/local), 60 39 then it is very easy to compile this program with the 61 40 following command (the argument <tt>-lemon</tt> tells the compiler 62 that we are using the installed LEMON) :41 that we are using the installed LEMON). 63 42 64 43 \verbatim … … 73 52 \endverbatim 74 53 75 [SEC]hello_lemon_user[SEC] If LEMON is Installed User-Local 76 77 Compiling the code is a bit more difficult if you installed LEMON 78 user-local into a directory (e.g. <tt>~/lemon</tt>) or if you just 79 skipped the step <tt>make install</tt>. 54 If LEMON is installed <b>user-local</b> into a directory 55 (e.g. <tt>~/lemon</tt>) or if you just skipped the step 56 <tt>make install</tt>, then compiling the code is a bit more difficult. 80 57 You have to issue a command like this. 81 58 … … 87 64 88 65 \verbatim 89 Hello World! 90 This is LEMON library here. We have a direceted graph. 91 92 Nodes: 3 2 1 0 93 Arcs: (2,3) (1,3) (1,2) (0,2) (0,1) 94 95 There is a map on the arcs (length): 96 97 length(2,3)=10 98 length(1,3)=25 99 length(1,2)=5 100 length(0,2)=20 101 length(0,1)=10 66 Hello World! This is LEMON library here. 67 We have a directed graph with 2 nodes and 1 arc. 102 68 \endverbatim 103 69 104 You may note that iterating through the nodes and arcs is done in the105 reverse order compared to the creating order (the IDs are in decreasing106 order).107 This is due to implementation aspects, that may differ at other graph108 types, moreover it may be changed in the next releases.109 Thus you should not exploit this method in any way, you should not110 suppose anything about the iteration order.111 112 70 If you managed to compile and run this example code without any problems, 113 you can go on reading this tutorial to get to know more features and tools 114 of LEMON. 115 Otherwise if you encountered problems that you did not manage to solve, 116 do not hesitate to 71 you may go on reading this tutorial to get to know the basic notions, 72 features and tools of LEMON. However if you encountered problems that 73 you did not manage to solve, do not hesitate to 117 74 <a href="mailto:lemon-user@lemon.cs.elte.hu"><b>contact us</b></a>. 118 75 -
toc.txt
r10 r16 3 3 ** intro_tutorial 4 4 * hello_lemon 5 ** hello_lemon_system 6 ** hello_lemon_user 7 **_digraph_build 8 **_digraph_iterate 9 **_standard_maps 10 **_algorithms 11 ***_alg_bfs_dfs 12 ***_alg_dijkstra 13 ***_alg_kruskal 14 **_undir_graphs 5 *_digraph_build 6 *_digraph_iterate 7 *_standard_maps 8 *_algorithms 9 **_alg_bfs_dfs 10 **_alg_dijkstra 11 **_alg_kruskal 12 *_undir_graphs 15 13 *_tools 16 14 **_lgf
Note: See TracChangeset
for help on using the changeset viewer.