54class KuratowskiStructure;
57namespace boyer_myrvold {
58class BoyerMyrvoldInit;
240 return m_link[direction][v]->theNode();
283 while (root !=
nullptr) {
301 <<
"\nprintNodeInfo(" <<
m_dfi[v] <<
"): "
311 std::cout << adj->
twinNode() <<
" ";
476 return lhs >
static_cast<int>(rhs);
480 return lhs ==
static_cast<int>(rhs);
484 return lhs !=
static_cast<int>(rhs);
Declaration and implementation of EdgeArray class.
Declaration of doubly linked lists and iterators.
Declaration and implementation of NodeArray class.
Declaration of singly linked lists and iterators.
Class for adjacency list elements.
adjEntry twin() const
Returns the corresponding adjacency element associated with the same edge.
adjEntry succ() const
Returns the successor in the adjacency list.
node twinNode() const
Returns the associated node of the corresponding adjacency entry (shorthand for twin()->theNode()).
node theNode() const
Returns the node whose adjacency list contains this element.
An array that keeps track of the number of inserted elements; also usable as an efficient stack.
The parameterized class Array implements dynamic arrays of type E.
Wrapper class used for preprocessing and valid invocation of the planarity test.
This class implements the extended BoyerMyrvold planarity embedding algorithm.
BoyerMyrvoldPlanar(Graph &g, bool bundles, EmbeddingGrade embeddingGrade, bool limitStructures, SListPure< KuratowskiStructure > &output, double randomness, bool avoidE2Minors, bool extractSubgraph, const EdgeArray< int > *edgeCosts=nullptr)
Constructor, for parameters see BoyerMyrvold.
NodeArray< SListPure< node > > m_pertinentRoots
List of virtual bicomp roots, that are pertinent to the current embedded node.
adjEntry beforeShortCircuitEdge(node v, int direction) const
Returns underlying former adjEntry, if a short circuit edge in direction of v exists.
Graph & m_g
Input graph, which can be altered.
static const int DirectionCW
Direction for clockwise traversal.
const double m_randomness
NodeArray< SListPure< adjEntry > > m_backedgeFlags
Holds information, if node is the source of a backedge.
NodeArray< ListIterator< node > > m_pNodeInParent
Pointer to node contained in the DFSChildList of his parent, if exists.
NodeArray< edge > m_visitedWithBackedge
Stores for each (real) non-root vertex v with which backedge it was visited during the walkup.
node successorOnExternalFace(node w, int &direction) const
Walks upon external face in the given direction starting at w.
bool externallyActive(node w, int v) const
Checks whether real node w is externally active while embedding node with DFI v.
int infoAboutNode(node w, int v) const
Checks all dynamic information about a node w while embedding node with DFI v.
BoyerMyrvoldPlanar(Graph &g, bool bundles, int embeddingGrade, bool limitStructures, SListPure< KuratowskiStructure > &output, double randomness, bool avoidE2Minors, bool extractSubgraph, const EdgeArray< int > *edgeCosts=nullptr)
Constructor, for parameters see BoyerMyrvold.
Array< node > m_nodeFromDFI
Returns appropriate node from given DFI.
bool pertinent(node w) const
Checks whether node w is pertinent. w has to be non-virtual.
NodeArray< int > m_numUnembeddedBackedgesInBicomp
Stores for each (virtual) bicomp root how many backedges to its bicomp still have to be embedded.
node constSuccessorWithoutShortCircuit(node v, int direction) const
Walks upon external face in direction avoiding short circuit edges.
NodeArray< int > m_dfi
The one and only DFI-NodeArray.
NodeArray< int > m_leastAncestor
The DFI of the least ancestor node over all backedges.
int walkdown(const int i, const node v, FindKuratowskis *findKuratowskis)
Walkdown: Embeds all backedges with DFI i as targetnode to node v.
const bool m_limitStructures
node constSuccessorOnExternalFace(node v, int direction)
Returns the successornode on the external face in given direction.
bool inactive(node w, int v)
Checks whether real node w is inactive while embedding node with DFI v.
NodeArray< int > m_lowPoint
The lowpoint of each node.
node successorWithoutShortCircuit(node w, int &direction)
Walks upon external face in given direction avoiding short circuit edges.
void seed(const std::minstd_rand rand)
Seeds the random generator for performing a random DFS. If this method is never called the random gen...
NodeArray< bool > m_flipped
Iff true, the node is the root of a bicomp which has to be flipped.
NodeArray< int > m_visited
This Array keeps track of all vertices that are visited by current walkup.
SListPure< KuratowskiStructure > & m_output
Data structure for the Kuratowski subdivisions, which will be returned.
bool wNodesExist(node root, node stopx, node stopy) const
Checks, if one ore more wNodes exist between the two stopping vertices stopx and stopy.
node activeSuccessor(node w, int &direction, int v, int &info) const
Walks upon external face in the given direction starting at w until an active vertex is reached.
NodeArray< adjEntry > m_link[2]
Links to opposite adjacency entries on external face in clockwise resp. ccw order.
bool start()
Starts the embedding algorithm.
NodeArray< node > m_realVertex
Link to non-virtual vertex of a virtual Vertex.
const EdgeArray< int > * m_edgeCosts
NodeArray< adjEntry > m_adjParent
The adjEntry which goes from DFS-parent to current vertex.
void mergeBiconnectedComponent(ArrayBuffer< int > &stack)
Merges the last two biconnected components saved in stack. Embeds them iff m_embeddingGrade !...
static const int DirectionCCW
Direction for counterclockwise traversal.
EdgeArray< node > m_pointsToRoot
Identifies the rootnode of the child bicomp the given backedge points to.
BoyerMyrvoldPlanar & operator=(const BoyerMyrvoldPlanar &)
Assignment operator is undefined!
NodeArray< int > m_highestSubtreeDFI
The highest DFI in a subtree with node as root.
NodeArray< ListPure< node > > m_separatedDFSChildList
A list to all separated DFS-children of node.
EmbeddingGrade
Denotes the different embedding options.
void createShortCircuitEdge(const node v, const int v_dir, const node w, const int w_dir)
Creates a short circuit edge from node v with direction v_dir to node w with direction w_dir.
EdgeArray< BoyerMyrvoldEdgeType > m_edgeType
Contains the type of each edge.
NodeArray< adjEntry > m_beforeSCE[2]
Links for short circuit edges.
void mergeUnprocessedNodes()
Merges unprocessed virtual nodes such as the dfs-roots with their real counterpart.
int m_flippedNodes
The whole number of bicomps, which have to be flipped.
const int m_embeddingGrade
bool m_extractSubgraph
Flag for extracting a planar subgraph instead of testing for planarity.
void postProcessEmbedding()
Postprocessing of the graph, so that all virtual vertices are embedded and all bicomps are flipped.
bool internallyActive(node w, int v) const
Checks whether real node w is internally active while embedding node with DFI v.
const bool m_avoidE2Minors
void printNodeInfo(node v)
Prints informations about node v.
void embedBackedges(const node v, const int v_dir, const node w, const int w_dir)
Links (and embeds iff m_embeddingGrade != EmbeddingGrade::doNotEmbed) backedges from node v with dire...
node walkup(const node v, const node w, const int marker, const edge back)
Walkup: Builds the pertinent subgraph for the backedge back.
void flipBicomp(int c, int marker, NodeArray< int > &visited, bool wholeGraph, bool deleteFlipFlags)
Flips all nodes of the bicomp with unique, real, rootchild c as necessary.
node constActiveSuccessor(node w, int direction, int v, int &info) const
Walks upon external face in the given direction (without changing it) until an active vertex is reach...
bool embed()
Starts the embedding phase, which embeds m_g node by node in descending DFI-order.
Dynamic arrays indexed with edges.
Class for the representation of edges.
This class collects information about Kuratowski Subdivisions which is used for extraction later.
Data type for general directed graphs (adjacency list representation).
Dynamic arrays indexed with nodes.
Class for the representation of nodes.
int degree() const
Returns the degree of the node (indegree + outdegree).
adjEntry firstAdj() const
Returns the first entry in the adjaceny list.
This class is used in the Boyer-Myrvold planarity test for preprocessing purposes.
#define OGDF_ASSERT(expr)
Assert condition expr. See doc/build.md for more information.
static MultilevelBuilder * getDoubleFactoredZeroAdjustedMerger()
The namespace for all OGDF objects.
BoyerMyrvoldEdgeType
Type of edge.
@ DfsParallel
parallel DFS-edge
@ BackDeleted
deleted backedge
bool operator>(int lhs, BoyerMyrvoldPlanar::EmbeddingGrade rhs)
bool operator!=(const Tuple2< E1, E2 > &t1, const Tuple2< E1, E2 > &t2)
Inequality operator for 2-tuples.
bool operator<=(int lhs, BoyerMyrvoldPlanar::EmbeddingGrade rhs)
bool operator==(const Tuple2< E1, E2 > &t1, const Tuple2< E1, E2 > &t2)
Equality operator for 2-tuples.