Changeset 2288:ef8af928c54e in lemon-0.x
- Timestamp:
- 10/31/06 16:57:53 (18 years ago)
- Branch:
- default
- Phase:
- public
- Convert:
- svn:c9d7d8f5-90d6-0310-b91f-818b3a526b0e/lemon/trunk@3053
- Location:
- doc
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
doc/basic_concepts.dox
r2195 r2288 3 3 4 4 \section basic_graph The graph classes 5 The most important classes in LEMON are the graph classes. A instance of a graph5 The most important classes in LEMON are the graph classes. An instance of a graph 6 6 class is the representation of the mathematical graph. It holds the topology and 7 7 every structural information of the graph. The structural manipulations are also … … 9 9 different classes for different purposes. They can differ in many ways, but all 10 10 have to satisfy one or more \ref concept "graph concepts" which are standardized 11 interfaces to work w hitthe rest of the library. The most basic concept is the11 interfaces to work with the rest of the library. The most basic concept is the 12 12 \ref Graph.<br> 13 13 A good example is the \ref ListGraph which we already know from Hello World and … … 27 27 If the graph fits the ExtendableGraphComponent concept, then you can add new nodes 28 28 to the graph with the addNode() member function. It returns the newly added node 29 (as value). So if you need the new node to do something useful with it, for example30 create a edge, assign a value to it through \ref map1 maps.29 (as value). So if you need the new node to do something useful with, for example 30 create an edge, assign a value to it through \ref map1 maps. 31 31 \code lemon::ListGraph::Node new_node = graph.addNode(); \endcode 32 32 33 If the graph fits the ErasableGraphComponent concept you also canremove nodes33 If the graph fits into the ErasableGraphComponent concept you can also remove nodes 34 34 from the graph with the erase() member function. 35 35 \code graph.erase( new_node ); \endcode … … 44 44 \subsection basic_edge Edges 45 45 An Edge is what you think it is. It goes from one node to another node (they can 46 be identical ). If the graph class is directed, the Edge is directed too. Otherwise46 be identical if the edge is a loop). If the graph class is directed, the Edge is directed too. Otherwise 47 47 the edge is considered undirected and called UEdge. 48 48 \code lemon::ListUGraph::UEdge \endcode … … 51 51 source node and the target node. The graph class must be extendable. 52 52 \code lemon::ListGraph::Edge new_edge = graph.addEdge( src_node, trg_node ); \endcode 53 You can handle edge similar as nodes. The erase() member function has an edge taking53 You can handle edges similar as nodes. The erase() member function has an edge taking 54 54 overload too. 55 55 … … 65 65 \section basic_iterators Iterators 66 66 Graphs are some kind of containers. And as you expect they have iterator types. 67 One for enodes and a couple for edges - and special classes can have additional67 One for nodes and a couple for edges - and special classes can have additional 68 68 iterators too. An example: 69 69 \code lemon::ListGraph::NodeIt \endcode 70 Th at is a node iterator. Every iterator type starts whit an name what refers to71 the iterated object, and ends w hit'It'.70 This is a node iterator. Every iterator type starts with a name that refers to 71 the iterated object, and ends with 'It'. 72 72 73 LEMON style iterators differ sfrom \c stl or \c boost iterators in a very tasty73 LEMON style iterators differ from \c stl or \c boost iterators in a very tasty 74 74 way. A graph has no begin or end - or at least a generic graph class has none. 75 75 If by some topology you could pick a good begin node, it would be misleading and … … 81 81 \code 82 82 for( ListGraph::NodeIt n(graph); n != INVALID; ++n ) 83 do_useful_things_w hit_node(n);83 do_useful_things_with_node(n); 84 84 \endcode 85 85 Note that the function \c do_useful_things_with_node() expects a Node type argument … … 90 90 91 91 <b>Very important!</b> The iteration has no defined order. There is absolutely no 92 guaranty that the next time the iteration will give us the nodes in the same order.92 warranty that the next time the iteration will give us the nodes in the same order. 93 93 Don't use this order to identify nodes! Use the \c id() member function of the 94 94 graph class described above. (There is a powerful technique using maps right in -
doc/getting_started.dox
r2195 r2288 2 2 \page getting_started Getting Started 3 3 4 At the beginning we hardly suggest that you open your favorite text editor5 and enter the code simultaneously as you read it. Compiling the demos is also 6 a good exercise.4 At the beginning we strongly suggest that you open your favorite text 5 editor and enter the code simultaneously as you read it. Compiling the 6 demos is also a good exercise. 7 7 8 As the first example we show you a lemon style "Hello World" program. Now we9 explain almost every line, but later we will skip the basics and focus on new 10 things.8 As the first example we show you a lemon style "Hello World" 9 program. Now we explain almost every line, but later we will skip the 10 basics and focus on new things. 11 11 12 12 \section hello_world Hello World in LEMON … … 29 29 \until Edge 30 30 31 For this demo we need to declare a ListGraph and a special NodeMap to store the32 characters associated to the graph's nodes. 31 For this demo we need to declare a ListGraph and a special NodeMap to 32 store the characters associated to the graph's nodes. 33 33 \skip main 34 34 \until char_map … … 38 38 \until addNode 39 39 40 When a new node or edge to the graph the assigned maps are automatically resized.41 So graphs can be buil ddynamically. The usage of a map is very natural.40 When a new node or edge is added to the graph the assigned maps are automatically resized. 41 So graphs can be built dynamically. The usage of a map is very natural. 42 42 \skip char_map 43 43 \until char_map 44 44 45 Notice that no reference or additional assignment needed to work with nodes.45 Notice that no reference or additional assignment is needed to work with nodes. 46 46 They won't become illegal or won't lead to throwing any exceptions. 47 You can declare and handle node like every other basic type such as \c int.47 You can declare and handle a node like every other basic type such as \c int. 48 48 \skip Store 49 49 \until char_map … … 51 51 As one expects adding an Edge is similar. You need to define the \b source node 52 52 and the \b destination node. The nodes must belong to the graph of course. The 53 Edge has the direction from the source to the destination. In some case you don't53 Edge has the direction from the source to the destination. In some cases you don't 54 54 want the edges to be directed - then you use an undirected graph. For example 55 55 lemon::ListUGraph.
Note: See TracChangeset
for help on using the changeset viewer.