COIN-OR::LEMON - Graph Library

Changeset 2163:bef3457be038 in lemon-0.x for lemon/concept/ugraph.h


Ignore:
Timestamp:
07/24/06 18:08:34 (14 years ago)
Author:
Balazs Dezso
Branch:
default
Phase:
public
Convert:
svn:c9d7d8f5-90d6-0310-b91f-818b3a526b0e/lemon/trunk@2878
Message:

Improving UGraph and BpUGraph concept classes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • lemon/concept/ugraph.h

    r2126 r2163  
    3636
    3737
    38     /// Class describing the concept of Undirected Graphs.
    39 
     38    /// \brief Class describing the concept of Undirected Graphs.
     39    ///
    4040    /// This class describes the common interface of all Undirected
    4141    /// Graphs.
     
    4444    /// without any sensible implementation. So any algorithm for
    4545    /// undirected graph should compile with this class, but it will not
    46     /// run properly, of couse.
     46    /// run properly, of course.
    4747    ///
    48     /// In LEMON undirected graphs also fulfill the concept of directed
    49     /// graphs (\ref lemon::concept::Graph "Graph Concept"). For
    50     /// explanation of this and more see also the page \ref graphs,
    51     /// a tutorial about graphs.
     48    /// The LEMON undirected graphs also fulfill the concept of
     49    /// directed graphs (\ref lemon::concept::Graph "Graph
     50    /// Concept"). Each undirected edges can be seen as two opposite
     51    /// directed edge and consequently the undirected graph can be
     52    /// seen as the direceted graph of these directed edges. The
     53    /// UGraph has the UEdge inner class for the undirected edges and
     54    /// the Edge type for the directed edges. The Edge type is
     55    /// convertible to UEdge or inherited from it so from a directed
     56    /// edge we can get the represented undirected edge.
    5257    ///
    53     /// You can assume that all undirected graph can be handled
    54     /// as a directed graph. This way it is fully conform
    55     /// to the Graph concept.
    56 
     58    /// In the sense of the LEMON each undirected edge has a default
     59    /// direction (it should be in every computer implementation,
     60    /// because the order of undirected edge's nodes defines an
     61    /// orientation). With the default orientation we can define that
     62    /// the directed edge is forward or backward directed. With the \c
     63    /// direction() and \c direct() function we can get the direction
     64    /// of the directed edge and we can direct an undirected edge.
     65    ///
     66    /// The UEdgeIt is an iterator for the undirected edges. We can use
     67    /// the UEdgeMap to map values for the undirected edges. The InEdgeIt and
     68    /// OutEdgeIt iterates on the same undirected edges but with opposite
     69    /// direction. The IncEdgeIt iterates also on the same undirected edges
     70    /// as the OutEdgeIt and InEdgeIt but it is not convertible to Edge just
     71    /// to UEdge. 
    5772    class UGraph {
    5873    public:
    59       ///\e
    60 
    61       ///\todo undocumented
    62       ///
     74      /// \brief The undirected graph should be tagged by the
     75      /// UndirectedTag.
     76      ///
     77      /// The undirected graph should be tagged by the UndirectedTag. This
     78      /// tag helps the enable_if technics to make compile time
     79      /// specializations for undirected graphs. 
    6380      typedef True UndirectedTag;
    6481
     
    297314
    298315      /// The directed edge type. It can be converted to the
    299       /// undirected edge.
     316      /// undirected edge or it should be inherited from the undirected
     317      /// edge.
    300318      class Edge : public UEdge {
    301319      public:
     
    563581      ///
    564582      /// Direct the given undirected edge. The returned edge source
    565       /// will be the given edge.
     583      /// will be the given node.
    566584      Edge direct(const UEdge&, const Node&) const {
    567585        return INVALID;
     
    570588      /// \brief Direct the given undirected edge.
    571589      ///
    572       /// Direct the given undirected edge. The returned edge source
    573       /// will be the source of the undirected edge if the given bool
    574       /// is true.
     590      /// Direct the given undirected edge. The returned edge
     591      /// represents the given undireted edge and the direction comes
     592      /// from the given bool.  The source of the undirected edge and
     593      /// the directed edge is the same when the given bool is true.
    575594      Edge direct(const UEdge&, bool) const {
    576595        return INVALID;
     
    580599      ///
    581600      /// Returns whether the given directed edge is same orientation as
    582       /// the corresponding undirected edge.
     601      /// the corresponding undirected edge's default orientation.
    583602      bool direction(Edge) const { return true; }
    584603
     
    590609      /// \brief Opposite node on an edge
    591610      ///
    592       /// \return the opposite of the given Node on the given Edge
     611      /// \return the opposite of the given Node on the given UEdge
    593612      Node oppositeNode(Node, UEdge) const { return INVALID; }
    594613
     
    597616      /// \return the first node of the given UEdge.
    598617      ///
    599       /// Naturally uectected edges don't have direction and thus
     618      /// Naturally undirected edges don't have direction and thus
    600619      /// don't have source and target node. But we use these two methods
    601       /// to query the two endnodes of the edge. The direction of the edge
     620      /// to query the two nodes of the edge. The direction of the edge
    602621      /// which arises this way is called the inherent direction of the
    603622      /// undirected edge, and is used to define the "default" direction
Note: See TracChangeset for help on using the changeset viewer.