Google OR-Tools v9.12
a fast and portable software suite for combinatorial optimization
Loading...
Searching...
No Matches
util::ReverseArcStaticGraph< NodeIndexType, ArcIndexType >::OutgoingOrOppositeIncomingArcIterator Class Reference

#include <graph.h>

Inheritance diagram for util::ReverseArcStaticGraph< NodeIndexType, ArcIndexType >::OutgoingOrOppositeIncomingArcIterator:
util::BaseGraph< NodeIndexType, ArcIndexType, true >

Public Member Functions

 OutgoingOrOppositeIncomingArcIterator (const ReverseArcStaticGraph &graph, NodeIndexType node)
 
 OutgoingOrOppositeIncomingArcIterator (const ReverseArcStaticGraph &graph, NodeIndexType node, ArcIndexType arc)
 
ArcIndexType Index () const
 
bool Ok () const
 
void Next ()
 
 DEFINE_STL_ITERATOR_FUNCTIONS (OutgoingOrOppositeIncomingArcIterator)
 
bool IsArcValid (ArcIndexType arc) const
 
 ReverseArcStaticGraph ()
 
 ReverseArcStaticGraph (NodeIndexType num_nodes, ArcIndexType arc_capacity)
 
ArcIndexType OutDegree (NodeIndexType node) const
 ReverseArcStaticGraph<>::OutDegree() and InDegree() work in O(1).
 
ArcIndexType InDegree (NodeIndexType node) const
 
BeginEndWrapper< OutgoingArcIteratorOutgoingArcs (NodeIndexType node) const
 
BeginEndWrapper< IncomingArcIteratorIncomingArcs (NodeIndexType node) const
 
BeginEndWrapper< OutgoingOrOppositeIncomingArcIteratorOutgoingOrOppositeIncomingArcs (NodeIndexType node) const
 
BeginEndWrapper< OppositeIncomingArcIteratorOppositeIncomingArcs (NodeIndexType node) const
 
BeginEndWrapper< OutgoingArcIteratorOutgoingArcsStartingFrom (NodeIndexType node, ArcIndexType from) const
 
BeginEndWrapper< IncomingArcIteratorIncomingArcsStartingFrom (NodeIndexType node, ArcIndexType from) const
 
BeginEndWrapper< OutgoingOrOppositeIncomingArcIteratorOutgoingOrOppositeIncomingArcsStartingFrom (NodeIndexType node, ArcIndexType from) const
 
BeginEndWrapper< OppositeIncomingArcIteratorOppositeIncomingArcsStartingFrom (NodeIndexType node, ArcIndexType from) const
 
absl::Span< const NodeIndexType > operator[] (NodeIndexType node) const
 
ArcIndexType OppositeArc (ArcIndexType arc) const
 
NodeIndexType Head (ArcIndexType arc) const
 
NodeIndexType Tail (ArcIndexType arc) const
 
void ReserveArcs (ArcIndexType bound) override
 
void AddNode (NodeIndexType node)
 
ArcIndexType AddArc (NodeIndexType tail, NodeIndexType head)
 
void Build ()
 
void Build (std::vector< ArcIndexType > *permutation)
 
bool IsArcValid (ArcIndexType arc) const
 
- Public Member Functions inherited from util::BaseGraph< NodeIndexType, ArcIndexType, true >
 BaseGraph ()
 
 BaseGraph (const BaseGraph &)=default
 
BaseGraphoperator= (const BaseGraph &)=default
 
virtual ~BaseGraph ()=default
 
NodeIndexType num_nodes () const
 
NodeIndexType size () const
 
ArcIndexType num_arcs () const
 Returns the number of valid arcs in the graph.
 
IntegerRange< NodeIndexAllNodes () const
 BaseGraph implementation -------------------------------------------------—.
 
IntegerRange< ArcIndexAllForwardArcs () const
 
bool IsNodeValid (NodeIndexType node) const
 Returns true if the given node is a valid node of the graph.
 
bool IsArcValid (ArcIndexType arc) const
 
NodeIndexType node_capacity () const
 Capacity reserved for future nodes, always >= num_nodes_.
 
ArcIndexType arc_capacity () const
 Capacity reserved for future arcs, always >= num_arcs_.
 
virtual void ReserveNodes (NodeIndexType bound)
 
void Reserve (NodeIndexType node_capacity, ArcIndexType arc_capacity)
 
void FreezeCapacities ()
 
 BaseGraph ()
 
 BaseGraph (const BaseGraph &)=default
 
BaseGraphoperator= (const BaseGraph &)=default
 
virtual ~BaseGraph ()=default
 
NodeIndexType num_nodes () const
 
NodeIndexType size () const
 
ArcIndexType num_arcs () const
 Returns the number of valid arcs in the graph.
 
IntegerRange< NodeIndexAllNodes () const
 BaseGraph implementation -------------------------------------------------—.
 
IntegerRange< ArcIndexAllForwardArcs () const
 
bool IsNodeValid (NodeIndexType node) const
 Returns true if the given node is a valid node of the graph.
 
bool IsArcValid (ArcIndexType arc) const
 
NodeIndexType node_capacity () const
 Capacity reserved for future nodes, always >= num_nodes_.
 
ArcIndexType arc_capacity () const
 Capacity reserved for future arcs, always >= num_arcs_.
 
virtual void ReserveNodes (NodeIndexType bound)
 
void Reserve (NodeIndexType node_capacity, ArcIndexType arc_capacity)
 
void FreezeCapacities ()
 

Additional Inherited Members

- Public Types inherited from util::BaseGraph< NodeIndexType, ArcIndexType, true >
typedef NodeIndexType NodeIndex
 
typedef ArcIndexType ArcIndex
 
- Static Public Attributes inherited from util::BaseGraph< NodeIndexType, ArcIndexType, true >
static constexpr bool kHasNegativeReverseArcs
 
static const NodeIndexType kNilNode
 
static const ArcIndexType kNilArc
 
static constexpr bool kHasNegativeReverseArcs
 
static const NodeIndexType kNilNode
 
static const ArcIndexType kNilArc
 
- Protected Member Functions inherited from util::BaseGraph< NodeIndexType, ArcIndexType, true >
void ComputeCumulativeSum (std::vector< ArcIndexType > *v)
 Functions commented when defined because they are implementation details.
 
void BuildStartAndForwardHead (SVector< NodeIndexType > *head, std::vector< ArcIndexType > *start, std::vector< ArcIndexType > *permutation)
 
void ComputeCumulativeSum (std::vector< ArcIndexType > *v)
 Functions commented when defined because they are implementation details.
 
void BuildStartAndForwardHead (SVector< NodeIndexType > *head, std::vector< ArcIndexType > *start, std::vector< ArcIndexType > *permutation)
 
- Protected Attributes inherited from util::BaseGraph< NodeIndexType, ArcIndexType, true >
NodeIndexType num_nodes_
 
NodeIndexType node_capacity_
 
ArcIndexType num_arcs_
 
ArcIndexType arc_capacity_
 
bool const_capacities_
 
NodeIndexType num_nodes_
 
NodeIndexType node_capacity_
 
ArcIndexType num_arcs_
 
ArcIndexType arc_capacity_
 
bool const_capacities_
 

Detailed Description

template<typename NodeIndexType = int32_t, typename ArcIndexType = int32_t>
class util::ReverseArcStaticGraph< NodeIndexType, ArcIndexType >::OutgoingOrOppositeIncomingArcIterator

Definition at line 1953 of file graph.h.

Constructor & Destructor Documentation

◆ OutgoingOrOppositeIncomingArcIterator() [1/2]

template<typename NodeIndexType = int32_t, typename ArcIndexType = int32_t>
util::ReverseArcStaticGraph< NodeIndexType, ArcIndexType >::OutgoingOrOppositeIncomingArcIterator::OutgoingOrOppositeIncomingArcIterator ( const ReverseArcStaticGraph & graph,
NodeIndexType node )
inline

Definition at line 1956 of file graph.h.

◆ OutgoingOrOppositeIncomingArcIterator() [2/2]

template<typename NodeIndexType = int32_t, typename ArcIndexType = int32_t>
util::ReverseArcStaticGraph< NodeIndexType, ArcIndexType >::OutgoingOrOppositeIncomingArcIterator::OutgoingOrOppositeIncomingArcIterator ( const ReverseArcStaticGraph & graph,
NodeIndexType node,
ArcIndexType arc )
inline

Definition at line 1966 of file graph.h.

Member Function Documentation

◆ AddArc()

ArcIndexType util::ReverseArcStaticGraph< NodeIndexType, ArcIndexType >::AddArc ( NodeIndexType tail,
NodeIndexType head )

We inverse head and tail here because it is more convenient this way during build time, see Build().

Definition at line 623 of file graph.h.

◆ AddNode()

void util::ReverseArcStaticGraph< NodeIndexType, ArcIndexType >::AddNode ( NodeIndexType node)

Definition at line 622 of file graph.h.

◆ Build() [1/2]

void util::ReverseArcStaticGraph< NodeIndexType, ArcIndexType >::Build ( )
inline

Definition at line 625 of file graph.h.

◆ Build() [2/2]

void util::ReverseArcStaticGraph< NodeIndexType, ArcIndexType >::Build ( std::vector< ArcIndexType > * permutation)

Computes incoming degree of each nodes.

Computes the reverse arcs of the forward arcs.

Note
this sort the reverse arcs with the same tail by head.
Todo
(user): the 0 is wasted here, but minor optimisation.

Computes in reverse_start_ the start index of the reverse arcs.

Fill reverse arc information.

Definition at line 626 of file graph.h.

◆ DEFINE_STL_ITERATOR_FUNCTIONS()

template<typename NodeIndexType = int32_t, typename ArcIndexType = int32_t>
util::ReverseArcStaticGraph< NodeIndexType, ArcIndexType >::OutgoingOrOppositeIncomingArcIterator::DEFINE_STL_ITERATOR_FUNCTIONS ( OutgoingOrOppositeIncomingArcIterator )

◆ Head()

NodeIndexType util::ReverseArcStaticGraph< NodeIndexType, ArcIndexType >::Head ( ArcIndexType arc) const
Todo
(user): support Head() and Tail() before Build(), like StaticGraph<>.

Definition at line 618 of file graph.h.

◆ IncomingArcs()

BeginEndWrapper< IncomingArcIterator > util::ReverseArcStaticGraph< NodeIndexType, ArcIndexType >::IncomingArcs ( NodeIndexType node) const

◆ IncomingArcsStartingFrom()

BeginEndWrapper< IncomingArcIterator > util::ReverseArcStaticGraph< NodeIndexType, ArcIndexType >::IncomingArcsStartingFrom ( NodeIndexType node,
ArcIndexType from ) const

◆ InDegree()

ArcIndexType util::ReverseArcStaticGraph< NodeIndexType, ArcIndexType >::InDegree ( NodeIndexType node) const

Definition at line 593 of file graph.h.

◆ Index()

template<typename NodeIndexType = int32_t, typename ArcIndexType = int32_t>
ArcIndexType util::ReverseArcStaticGraph< NodeIndexType, ArcIndexType >::OutgoingOrOppositeIncomingArcIterator::Index ( ) const
inline

Definition at line 1977 of file graph.h.

◆ IsArcValid() [1/2]

( ArcIndexType arc) const

Returns true if the given arc is a valid arc of the graph.

Note
the arc validity range changes for graph with reverse arcs.

◆ IsArcValid() [2/2]

bool util::BaseGraph< NodeIndexType, ArcIndexType, HasNegativeReverseArcs >::IsArcValid ( ArcIndexType arc) const
inline

Returns true if the given arc is a valid arc of the graph.

Note
the arc validity range changes for graph with reverse arcs.

Definition at line 576 of file graph.h.

◆ Next()

template<typename NodeIndexType = int32_t, typename ArcIndexType = int32_t>
void util::ReverseArcStaticGraph< NodeIndexType, ArcIndexType >::OutgoingOrOppositeIncomingArcIterator::Next ( )
inline

Definition at line 1979 of file graph.h.

◆ Ok()

template<typename NodeIndexType = int32_t, typename ArcIndexType = int32_t>
bool util::ReverseArcStaticGraph< NodeIndexType, ArcIndexType >::OutgoingOrOppositeIncomingArcIterator::Ok ( ) const
inline

Definition at line 1978 of file graph.h.

◆ operator[]()

absl::Span< const NodeIndexType > util::ReverseArcStaticGraph< NodeIndexType, ArcIndexType >::operator[] ( NodeIndexType node) const

This loops over the heads of the OutgoingArcs(node). It is just a more convenient way to achieve this. Moreover this interface is used by some graph algorithms.

Definition at line 614 of file graph.h.

◆ OppositeArc()

ArcIndexType util::ReverseArcStaticGraph< NodeIndexType, ArcIndexType >::OppositeArc ( ArcIndexType arc) const

Definition at line 616 of file graph.h.

◆ OppositeIncomingArcs()

BeginEndWrapper< OppositeIncomingArcIterator > util::ReverseArcStaticGraph< NodeIndexType, ArcIndexType >::OppositeIncomingArcs ( NodeIndexType node) const

◆ OppositeIncomingArcsStartingFrom()

BeginEndWrapper< OppositeIncomingArcIterator > util::ReverseArcStaticGraph< NodeIndexType, ArcIndexType >::OppositeIncomingArcsStartingFrom ( NodeIndexType node,
ArcIndexType from ) const

◆ OutDegree()

ArcIndexType util::ReverseArcStaticGraph< NodeIndexType, ArcIndexType >::OutDegree ( NodeIndexType node) const

ReverseArcStaticGraph<>::OutDegree() and InDegree() work in O(1).

Definition at line 592 of file graph.h.

◆ OutgoingArcs()

BeginEndWrapper< OutgoingArcIterator > util::ReverseArcStaticGraph< NodeIndexType, ArcIndexType >::OutgoingArcs ( NodeIndexType node) const

◆ OutgoingArcsStartingFrom()

BeginEndWrapper< OutgoingArcIterator > util::ReverseArcStaticGraph< NodeIndexType, ArcIndexType >::OutgoingArcsStartingFrom ( NodeIndexType node,
ArcIndexType from ) const

◆ OutgoingOrOppositeIncomingArcs()

BeginEndWrapper< OutgoingOrOppositeIncomingArcIterator > util::ReverseArcStaticGraph< NodeIndexType, ArcIndexType >::OutgoingOrOppositeIncomingArcs ( NodeIndexType node) const

◆ OutgoingOrOppositeIncomingArcsStartingFrom()

BeginEndWrapper< OutgoingOrOppositeIncomingArcIterator > util::ReverseArcStaticGraph< NodeIndexType, ArcIndexType >::OutgoingOrOppositeIncomingArcsStartingFrom ( NodeIndexType node,
ArcIndexType from ) const

◆ ReserveArcs()

void util::ReverseArcStaticGraph< NodeIndexType, ArcIndexType >::ReserveArcs ( ArcIndexType bound)
overridevirtual

Reimplemented from util::BaseGraph< NodeIndexType, ArcIndexType, true >.

Definition at line 621 of file graph.h.

◆ ReverseArcStaticGraph() [1/2]

util::ReverseArcStaticGraph< NodeIndexType, ArcIndexType >::ReverseArcStaticGraph ( )
inline

Definition at line 577 of file graph.h.

◆ ReverseArcStaticGraph() [2/2]

util::ReverseArcStaticGraph< NodeIndexType, ArcIndexType >::ReverseArcStaticGraph ( NodeIndexType num_nodes,
ArcIndexType arc_capacity )
inline

Definition at line 578 of file graph.h.

◆ Tail()

NodeIndexType util::ReverseArcStaticGraph< NodeIndexType, ArcIndexType >::Tail ( ArcIndexType arc) const

Definition at line 619 of file graph.h.


The documentation for this class was generated from the following file: