Open
Graph Drawing
Framework

 v. 2023.09 (Elderberry)
 

StaticSPQRTree.h
Go to the documentation of this file.
1 
32 #pragma once
33 
37 
38 namespace ogdf {
39 
73 class OGDF_EXPORT StaticSPQRTree : public virtual SPQRTree {
74 public:
75  friend class StaticSkeleton;
76 
77  // constructors
78 
84  explicit StaticSPQRTree(const Graph& G) : m_skOf(G), m_copyOf(G) {
85  OGDF_ASSERT(G.numberOfEdges() > 0);
86  m_pGraph = &G;
87  init(G.firstEdge());
88  }
89 
95  StaticSPQRTree(const Graph& G, edge e) : m_skOf(G), m_copyOf(G) {
96  m_pGraph = &G;
97  init(e);
98  }
99 
105  StaticSPQRTree(const Graph& G, Triconnectivity& tricComp) : m_skOf(G), m_copyOf(G) {
106  m_pGraph = &G;
107  init(G.firstEdge(), tricComp);
108  }
109 
111  ~StaticSPQRTree();
112 
115 
117  const Graph& originalGraph() const override { return *m_pGraph; }
118 
120  const Graph& tree() const override { return m_tree; }
121 
123  edge rootEdge() const override { return m_rootEdge; }
124 
126  node rootNode() const override { return m_rootNode; }
127 
129  int numberOfSNodes() const override { return m_numS; }
130 
132  int numberOfPNodes() const override { return m_numP; }
133 
135  int numberOfRNodes() const override { return m_numR; }
136 
141  NodeType typeOf(node v) const override { return m_type[v]; }
142 
144  List<node> nodesOfType(NodeType t) const override;
145 
150  Skeleton& skeleton(node v) const override { return *m_sk[v]; }
151 
156  edge skeletonEdgeSrc(edge e) const { return m_skEdgeSrc[e]; }
157 
162  edge skeletonEdgeTgt(edge e) const { return m_skEdgeTgt[e]; }
163 
168  const Skeleton& skeletonOfReal(edge e) const override { return *m_skOf[e]; }
169 
174  edge copyOfReal(edge e) const override { return m_copyOf[e]; }
175 
179 
184  node rootTreeAt(edge e) override;
185 
190  node rootTreeAt(node v) override;
191 
193 
194 protected:
196  void init(edge e);
197 
199  void init(edge eRef, Triconnectivity& tricComp);
200 
202  void rootRec(node v, edge ef);
203 
208  void cpRec(node v, PertinentGraph& Gp) const override {
209  const Skeleton& S = skeleton(v);
210 
211  for (edge e : S.getGraph().edges) {
212  edge eOrig = S.realEdge(e);
213  if (eOrig != nullptr) {
214  cpAddEdge(eOrig, Gp);
215  }
216  }
217 
218  for (adjEntry adj : v->adjEntries) {
219  node w = adj->theEdge()->target();
220  if (w != v) {
221  cpRec(w, Gp);
222  }
223  }
224  }
225 
226  const Graph* m_pGraph;
228 
231 
232  int m_numS;
233  int m_numP;
234  int m_numR;
235 
237 
241 
244 };
245 
246 }
ogdf
The namespace for all OGDF objects.
Definition: AugmentationModule.h:36
ogdf::StaticSPQRTree::m_sk
NodeArray< StaticSkeleton * > m_sk
pointer to skeleton of a node in T
Definition: StaticSPQRTree.h:238
ogdf::StaticSPQRTree
Linear-time implementation of static SPQR-trees.
Definition: StaticSPQRTree.h:73
ogdf::StaticSPQRTree::m_skEdgeSrc
EdgeArray< edge > m_skEdgeSrc
corresponding edge in skeleton(source(e))
Definition: StaticSPQRTree.h:239
OGDF_ASSERT
#define OGDF_ASSERT(expr)
Assert condition expr. See doc/build.md for more information.
Definition: basic.h:54
ogdf::StaticSkeleton
Skeleton graphs of nodes in a static SPQR-tree.
Definition: StaticSkeleton.h:58
SPQRTree.h
Declaration of class SPQRTree.
ogdf::Skeleton::realEdge
virtual edge realEdge(edge e) const =0
Returns the real edge that corresponds to skeleton edge e.
ogdf::StaticSPQRTree::copyOfReal
edge copyOfReal(edge e) const override
Returns the skeleton edge that corresponds to the real edge e.
Definition: StaticSPQRTree.h:174
ogdf::StaticSPQRTree::skeletonEdgeSrc
edge skeletonEdgeSrc(edge e) const
Returns the edge in skeleton of source(e) that corresponds to tree edge e.
Definition: StaticSPQRTree.h:156
ogdf::StaticSPQRTree::numberOfRNodes
int numberOfRNodes() const override
Returns the number of R-nodes in T.
Definition: StaticSPQRTree.h:135
ogdf::SPQRTree
Linear-time implementation of static SPQR-trees.
Definition: SPQRTree.h:70
ogdf::StaticSPQRTree::skeletonOfReal
const Skeleton & skeletonOfReal(edge e) const override
Returns the skeleton that contains the real edge e.
Definition: StaticSPQRTree.h:168
ogdf::StaticSPQRTree::m_skEdgeTgt
EdgeArray< edge > m_skEdgeTgt
corresponding edge in skeleton(target(e))
Definition: StaticSPQRTree.h:240
ogdf::StaticSPQRTree::numberOfSNodes
int numberOfSNodes() const override
Returns the number of S-nodes in T.
Definition: StaticSPQRTree.h:129
ogdf::StaticSPQRTree::StaticSPQRTree
StaticSPQRTree(const Graph &G, Triconnectivity &tricComp)
Creates an SPQR tree T for graph G rooted at the first edge of G.
Definition: StaticSPQRTree.h:105
ogdf::AdjElement
Class for adjacency list elements.
Definition: Graph_d.h:135
ogdf::StaticSPQRTree::m_numS
int m_numS
number of S-nodes
Definition: StaticSPQRTree.h:232
ogdf::StaticSPQRTree::m_skOf
EdgeArray< StaticSkeleton * > m_skOf
skeleton containing real edge e
Definition: StaticSPQRTree.h:242
ogdf::StaticSPQRTree::skeleton
Skeleton & skeleton(node v) const override
Returns the skeleton of node v.
Definition: StaticSPQRTree.h:150
ogdf::StaticSPQRTree::skeletonEdgeTgt
edge skeletonEdgeTgt(edge e) const
Returns the edge in skeleton of target(e) that corresponds to tree edge e.
Definition: StaticSPQRTree.h:162
ogdf::AdjElement::theEdge
edge theEdge() const
Returns the edge associated with this adjacency entry.
Definition: Graph_d.h:153
ogdf::StaticSPQRTree::m_type
NodeArray< NodeType > m_type
type of nodes in T
Definition: StaticSPQRTree.h:236
ogdf::StaticSPQRTree::m_copyOf
EdgeArray< edge > m_copyOf
skeleton edge corresponding to real edge e
Definition: StaticSPQRTree.h:243
StaticSkeleton.h
Declaration of class StaticSkeleton.
ogdf::StaticSPQRTree::m_tree
Graph m_tree
underlying tree graph
Definition: StaticSPQRTree.h:227
ogdf::StaticSPQRTree::m_numP
int m_numP
number of P-nodes
Definition: StaticSPQRTree.h:233
ogdf::StaticSPQRTree::rootEdge
edge rootEdge() const override
Returns the edge of G at which T is rooted.
Definition: StaticSPQRTree.h:123
ogdf::NodeElement::adjEntries
internal::GraphObjectContainer< AdjElement > adjEntries
The container containing all entries in the adjacency list of this node.
Definition: Graph_d.h:264
ogdf::StaticSPQRTree::m_numR
int m_numR
number of R-nodes
Definition: StaticSPQRTree.h:234
ogdf::StaticSPQRTree::m_rootNode
node m_rootNode
root node of T
Definition: StaticSPQRTree.h:230
ogdf::List
Doubly linked lists (maintaining the length of the list).
Definition: List.h:42
ogdf::internal::GraphRegisteredArray
RegisteredArray for nodes, edges and adjEntries of a graph.
Definition: Graph_d.h:651
ogdf::StaticSPQRTree::StaticSPQRTree
StaticSPQRTree(const Graph &G, edge e)
Creates an SPQR tree T for graph G rooted at the edge e.
Definition: StaticSPQRTree.h:95
ogdf::StaticSPQRTree::originalGraph
const Graph & originalGraph() const override
Returns a reference to the original graph G.
Definition: StaticSPQRTree.h:117
ogdf::Graph
Data type for general directed graphs (adjacency list representation).
Definition: Graph_d.h:862
ogdf::StaticSPQRTree::numberOfPNodes
int numberOfPNodes() const override
Returns the number of P-nodes in T.
Definition: StaticSPQRTree.h:132
ogdf::Skeleton::getGraph
const Graph & getGraph() const
Returns a reference to the skeleton graph M.
Definition: Skeleton.h:89
ogdf::StaticSPQRTree::m_pGraph
const Graph * m_pGraph
pointer to original graph
Definition: StaticSPQRTree.h:226
ogdf::StaticSPQRTree::typeOf
NodeType typeOf(node v) const override
Returns the type of node v.
Definition: StaticSPQRTree.h:141
ogdf::StaticSPQRTree::m_rootEdge
edge m_rootEdge
edge of G at which T is rooted
Definition: StaticSPQRTree.h:229
ogdf::graphics::init
void init()
Definition: graphics.h:446
ogdf::StaticSPQRTree::tree
const Graph & tree() const override
Returns a reference to the tree T.
Definition: StaticSPQRTree.h:120
ogdf::Graph::edges
internal::GraphObjectContainer< EdgeElement > edges
The container containing all edge objects.
Definition: Graph_d.h:927
OGDF_EXPORT
#define OGDF_EXPORT
Specifies that a function or class is exported by the OGDF DLL.
Definition: config.h:101
ogdf::StaticSPQRTree::rootNode
node rootNode() const override
Returns the root node of T.
Definition: StaticSPQRTree.h:126
ogdf::EdgeElement
Class for the representation of edges.
Definition: Graph_d.h:356
Triconnectivity.h
Declares class Triconnectivity which realizes the Hopcroft/Tarjan algorithm for finding the triconnec...
ogdf::Skeleton
Skeleton graphs of nodes in an SPQR-tree.
Definition: Skeleton.h:59
ogdf::PertinentGraph
Pertinent graphs of nodes in an SPQR-tree.
Definition: PertinentGraph.h:59
ogdf::Triconnectivity
realizes Hopcroft/Tarjan algorithm for finding the triconnected components of a biconnected multi-gra...
Definition: Triconnectivity.h:48
ogdf::EdgeElement::target
node target() const
Returns the target node of the edge.
Definition: Graph_d.h:394
ogdf::NodeElement
Class for the representation of nodes.
Definition: Graph_d.h:233
ogdf::StaticSPQRTree::cpRec
void cpRec(node v, PertinentGraph &Gp) const override
Recursively performs the task of adding edges (and nodes) to the pertinent graph Gp for each involved...
Definition: StaticSPQRTree.h:208
ogdf::StaticSPQRTree::StaticSPQRTree
StaticSPQRTree(const Graph &G)
Creates an SPQR tree T for graph G rooted at the first edge of G.
Definition: StaticSPQRTree.h:84
ogdf::internal::EdgeArrayBase2
RegisteredArray for edges of a graph, specialized for EdgeArray<edge>.
Definition: Graph_d.h:709