Changeset 2216:1e45cdeea3cc in lemon-0.x
- Timestamp:
- 09/14/06 21:11:24 (19 years ago)
- Branch:
- default
- Phase:
- public
- Convert:
- svn:c9d7d8f5-90d6-0310-b91f-818b3a526b0e/lemon/trunk@2946
- Files:
-
- 3 added
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
demo/Makefile.am
r2195 r2216 22 22 demo/grid_ugraph_demo \ 23 23 demo/topology_demo \ 24 demo/topological_ordering \ 24 25 demo/simann_maxcut_demo \ 25 26 demo/disjoint_paths_demo \ … … 79 80 demo_topology_demo_SOURCES = demo/topology_demo.cc 80 81 82 demo_topological_ordering_SOURCES = demo/topological_ordering.cc 83 81 84 demo_simann_maxcut_demo_SOURCES = demo/simann_maxcut_demo.cc 82 85 -
doc/Makefile.am
r2196 r2216 17 17 doc/graphs.dox \ 18 18 doc/groups.dox \ 19 doc/lemon_file_format.dox \ 19 20 doc/license.dox \ 20 21 doc/mainpage.dox \ … … 25 26 doc/namespaces.dox \ 26 27 doc/quicktour.dox \ 28 doc/read_write_bg.dox \ 27 29 doc/ugraphs.dox 28 30 -
doc/algorithms.dox
r2196 r2216 1 namespace lemon { 1 2 /** 2 3 \page algorithms Algorithms 3 4 4 Place-holder page for algorithms. 5 \section algo_bfs_dfs Bfs/Dfs 6 Both \ref lemon::Bfs "Bfs" and \ref lemon::Dfs "Dfs" are highly adaptable and efficient 7 implementations of the well known algorithms. The algorithms are placed most cases in 8 separated files named after the algorithm itself but lower case as all other header file names. 9 For example the next Bfs class is in the \c lemon/bfs.h. 10 11 \subsection Bfs 12 The algorithm is implemented in the \ref lemon::Bfs "Bfs" template class - rather than as function. 13 The class has two template parameters: \b GR and \TR.<br> 14 GR is the graph the algorithm runs on. It has \ref lemon::ListGraph "ListGraph" as default type. 15 TR is a Traits class commonly used to easy the parametrization of templates. In most cases you 16 wont need to modify the default type \ref lemon::BfsDefaultTraits "BfsDefaultTraits<GR>". 17 18 To use the class, declare it! 19 \code 20 Bfs<ListUGraph> bfs(gr); 21 \endcode 22 Note the lack of second template argument because of the default parameter. 23 24 It provides a simple but powerful interface to control the execution. 25 \code 26 int dist = bfs.run(s,t); 27 \endcode 28 It finds the shortest path from node \c s to node \c t and returns it, or zero 29 if there is no path from \c s to \c t.<br> 30 If you want the shortest path from a specified node to all other node, just write: 31 \code 32 bfs.run(s); 33 \endcode 34 Now the distances and path information are stored in maps which you can access with 35 member functions like \ref lemon::Bfs::distMap "distMap()" or \ref lemon::Bfs::predMap "predMap()".<br> 36 Or more directly whit other member functions like \c predNode(). Once the algorithm 37 is finished (or to be precise reached that node) \ref lemon::Bfs::dist "dist()" or \ref lemon::Bfs::predNode 38 "predNode()" can be called. 39 40 For an example let's say we want to print the shortest path of those nodes which 41 are in a certain distance. 42 \code 43 bfs.run(s); 44 45 for( ListUGraph::NodeIt n(gr); n != INVALID; ++n ) { 46 if( bfs.reached(n) && bfs.dist(n) <= max_dist ) { 47 std::cout << gr.id(n); 48 49 Node prev = bfs.prevNode(n); 50 while( prev != INVALID ) { 51 std::cout << "<-" << gr.id(prev); 52 prev = bfs.prevNode(n); 53 } 54 55 std::cout << std::endl; 56 } 57 } 58 \endcode 59 60 \subsubsection bfs_adv_control Advanced control 61 In the previous code we only used \c run(). Now we introduce the way you can directly 62 control the execution of the algorithm. 63 64 First you have to initialize the variables with \ref lemon::Bfs::init "init()". 65 \code 66 bfs.init(); 67 \endcode 68 69 Then you add one or more source nodes to the queue. They will be processed, as they would 70 be reached by the algorithm before. And yes - you can add more sources during the execution. 71 \code 72 bfs.addSource(node_1); 73 bfs.addSource(node_2); 74 ... 75 \endcode 76 77 And finally you can start the process with \ref lemon::Bfs::start "start()", or 78 you can write your own loop to process the nodes one-by-one. 79 80 \todo demo for bfs advanced control 81 82 \subsection Dfs 83 Since Dfs is very similar to Bfs with a few tiny differences we only see a bit more complex example 84 to demonstrate Dfs's capabilities. 85 86 We will see a program, which solves the problem of <b>topological ordering</b>. 87 We need to know in which order we should put on our clothes. The program will do the following: 88 <ol> 89 <li>We run the dfs algorithm to all nodes. 90 <li>Put every node into a list when processed completely. 91 <li>Write out the list in reverse order. 92 </ol> 93 94 \dontinclude topological_ordering.cc 95 First of all we will need an own \ref lemon::Dfs::ProcessedMap "ProcessedMap". The ordering 96 will be done through it. 97 \skip SerializingWriteMap 98 \until }; 99 The class meets the \ref lemon::WriteMap "WriteMap" concept. In it's \c set() method the only thing 100 we need to do is insert the key - that is the node who's processing just finished - into the beginning 101 of the list. 102 103 First we declare the needed data structures: the graph and a map to store the nodes' label. 104 \skip ListGraph 105 \until label 106 107 Now we build a graph. But keep in mind that it must be DAG because cyclic graphs has no topological 108 ordering. 109 \skip belt 110 \until trousers 111 We label them... 112 \skip label 113 \until trousers 114 Then add directed edges which represent the precedences between those items. 115 \skip trousers, belt 116 \until ); 117 118 See how easy is to access the internal information of this algorithm trough maps. 119 We only need to set our own map as the class's \ref lemon::Dfs::ProcessedMap "ProcessedMap". 120 \skip Dfs 121 \until run 122 123 And now comes the third part. Write out the list in reverse order. But the list was 124 composed in reverse way (with \c push_front() instead of \c push_back() so we just iterate it. 125 \skip std 126 \until endl 127 128 The program is to be found in the \ref demo directory: \ref topological_ordering.cc 5 129 */ 130 } -
doc/tutorial.dox
r2195 r2216 1 namespace lemon { 1 2 /** 2 3 \page Tutorial LEMON Tutorial … … 16 17 <LI>\ref maps1 17 18 </UL> 18 <LI><A href="#file">Lemon Graph File Format</A> 19 <LI>\ref lemon_file_format 20 <UL> 21 <LI>\ref read_write_bg 22 </UL> 19 23 <LI>\ref algorithms 20 24 <UL> 21 <LI> <A href="#bfs_dfs">Bfs/Dfs</A>22 <LI> <A href="#dijkstra">Dijkstra</A>23 <LI> <A href="#kruskal">Kruskal</A>25 <LI>\ref algo_bfs_dfs 26 <LI>Dijkstra 27 <LI>Kruskal 24 28 </UL> 25 29 <LI>\ref maps2 26 30 <UL> 27 31 <LI>\ref custom_maps 28 <LI> <A href="#map_adaptors">Map Adaptors</A>29 <LI> <A href="#special_maps">Special Purpose Maps</a>32 <LI>Map Adaptors 33 <LI>Special Purpose Maps 30 34 </UL> 31 <LI> <A href="#show">Show a graph</A>32 <LI> <A href="#misc">Miscellaneous Tool</A>35 <LI>Show a graph 36 <LI>Miscellaneous Tool 33 37 <UL> 34 <LI> <A href="#lp">LP solver</A>35 <LI> <A href="#simann">Simulated Annealing</A>38 <LI>LP solver 39 <LI>Simulated Annealing 36 40 </UL> 37 41 </OL> … … 43 47 sections. 44 48 */ 49 }
Note: See TracChangeset
for help on using the changeset viewer.