This class implements the extended BoyerMyrvold planarity embedding algorithm. More...
#include <ogdf/planarity/boyer_myrvold/BoyerMyrvoldPlanar.h>
Public Types | |
enum class | EmbeddingGrade { doNotEmbed = -3 , doNotFind = -2 , doFindUnlimited = -1 , doFindZero = 0 } |
Denotes the different embedding options. More... | |
Public Member Functions | |
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. | |
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. | |
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. | |
BoyerMyrvoldPlanar & | operator= (const BoyerMyrvoldPlanar &) |
Assignment operator is undefined! | |
void | seed (const std::minstd_rand rand) |
Seeds the random generator for performing a random DFS. If this method is never called the random generator will be seeded by a value extracted from the global random generator. | |
bool | start () |
Starts the embedding algorithm. | |
Static Public Attributes | |
static const int | DirectionCCW |
Direction for counterclockwise traversal. | |
static const int | DirectionCW |
Direction for clockwise traversal. | |
Protected Member Functions | |
Methods for Walkup and Walkdown | |
bool | pertinent (node w) const |
Checks whether node w is pertinent. w has to be non-virtual. | |
bool | internallyActive (node w, int v) const |
Checks whether real node w is internally active while embedding node with DFI v . | |
bool | externallyActive (node w, int v) const |
Checks whether real node w is externally active while embedding node with DFI v . | |
bool | inactive (node w, int v) |
Checks whether real node w is inactive 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 . | |
node | successorOnExternalFace (node w, int &direction) const |
Walks upon external face in the given direction starting at w . | |
node | successorWithoutShortCircuit (node w, int &direction) |
Walks upon external face in given direction avoiding short circuit edges. | |
node | constSuccessorOnExternalFace (node v, int direction) |
Returns the successornode on the external face in given direction . | |
node | constSuccessorWithoutShortCircuit (node v, int direction) const |
Walks upon external face in direction avoiding short circuit edges. | |
adjEntry | beforeShortCircuitEdge (node v, int direction) const |
Returns underlying former adjEntry, if a short circuit edge in direction of v exists. | |
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. | |
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 reached. | |
bool | wNodesExist (node root, node stopx, node stopy) const |
Checks, if one ore more wNodes exist between the two stopping vertices stopx and stopy . | |
void | printNodeInfo (node v) |
Prints informations about node v . | |
void | mergeBiconnectedComponent (ArrayBuffer< int > &stack) |
Merges the last two biconnected components saved in stack . Embeds them iff m_embeddingGrade != EmbeddingGrade::doNotEmbed. | |
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 direction v_dir to node w with direction w_dir . | |
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 . | |
node | walkup (const node v, const node w, const int marker, const edge back) |
Walkup: Builds the pertinent subgraph for the backedge back . | |
int | walkdown (const int i, const node v, FindKuratowskis *findKuratowskis) |
Walkdown: Embeds all backedges with DFI i as targetnode to node v . | |
void | mergeUnprocessedNodes () |
Merges unprocessed virtual nodes such as the dfs-roots with their real counterpart. | |
void | postProcessEmbedding () |
Postprocessing of the graph, so that all virtual vertices are embedded and all bicomps are flipped. | |
bool | embed () |
Starts the embedding phase, which embeds m_g node by node in descending DFI-order. | |
Protected Attributes | |
bool | m_extractSubgraph = true |
Flag for extracting a planar subgraph instead of testing for planarity. | |
int | m_flippedNodes |
The whole number of bicomps, which have to be flipped. | |
Graph & | m_g |
Input graph, which can be altered. | |
Some parameters... see BoyerMyrvold for further options | |
const bool | m_bundles |
const int | m_embeddingGrade |
const bool | m_limitStructures |
const double | m_randomness |
const bool | m_avoidE2Minors |
const EdgeArray< int > * | m_edgeCosts |
std::minstd_rand | m_rand |
Members from BoyerMyrvoldInit | |
NodeArray< node > | m_realVertex |
Link to non-virtual vertex of a virtual Vertex. | |
NodeArray< int > | m_dfi |
The one and only DFI-NodeArray. | |
Array< node > | m_nodeFromDFI |
Returns appropriate node from given DFI. | |
NodeArray< adjEntry > | m_link [2] |
Links to opposite adjacency entries on external face in clockwise resp. ccw order. | |
NodeArray< adjEntry > | m_beforeSCE [2] |
Links for short circuit edges. | |
NodeArray< adjEntry > | m_adjParent |
The adjEntry which goes from DFS-parent to current vertex. | |
NodeArray< int > | m_leastAncestor |
The DFI of the least ancestor node over all backedges. | |
EdgeArray< BoyerMyrvoldEdgeType > | m_edgeType |
Contains the type of each edge. | |
NodeArray< int > | m_lowPoint |
The lowpoint of each node. | |
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. | |
NodeArray< ListIterator< node > > | m_pNodeInParent |
Pointer to node contained in the DFSChildList of his parent, if exists. | |
Members for Walkup and Walkdown | |
NodeArray< int > | m_visited |
This Array keeps track of all vertices that are visited by current walkup. | |
EdgeArray< node > | m_pointsToRoot |
Identifies the rootnode of the child bicomp the given backedge points to. | |
NodeArray< edge > | m_visitedWithBackedge |
Stores for each (real) non-root vertex v with which backedge it was visited during the walkup. | |
NodeArray< int > | m_numUnembeddedBackedgesInBicomp |
Stores for each (virtual) bicomp root how many backedges to its bicomp still have to be embedded. | |
NodeArray< bool > | m_flipped |
Iff true, the node is the root of a bicomp which has to be flipped. | |
NodeArray< SListPure< adjEntry > > | m_backedgeFlags |
Holds information, if node is the source of a backedge. | |
NodeArray< SListPure< node > > | m_pertinentRoots |
List of virtual bicomp roots, that are pertinent to the current embedded node. | |
SListPure< KuratowskiStructure > & | m_output |
Data structure for the Kuratowski subdivisions, which will be returned. | |
Friends | |
class | boyer_myrvold::BoyerMyrvoldInit |
class | BoyerMyrvold |
class | ExtractKuratowskis |
class | FindKuratowskis |
This class implements the extended BoyerMyrvold planarity embedding algorithm.
Definition at line 62 of file BoyerMyrvoldPlanar.h.
Denotes the different embedding options.
Enumerator | |
---|---|
doNotEmbed | |
doNotFind | |
doFindUnlimited | |
doFindZero |
Definition at line 76 of file BoyerMyrvoldPlanar.h.
ogdf::BoyerMyrvoldPlanar::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.
|
inline |
Constructor, for parameters see BoyerMyrvold.
Definition at line 89 of file BoyerMyrvoldPlanar.h.
|
protected |
Walks upon external face in the given direction
starting at w
until an active vertex is reached.
Returns dynamical typeinformation info
of that endvertex.
|
inlineprotected |
Returns underlying former adjEntry, if a short circuit edge in direction
of v
exists.
Otherwise the common edge is returned. In every case the returned adjEntry points to the targetnode.
Definition at line 256 of file BoyerMyrvoldPlanar.h.
|
inlineprotected |
Walks upon external face in the given direction
(without changing it) until an active vertex is reached.
Returns dynamical typeinformation info
of that endvertex. But does not change the direction
.
Definition at line 270 of file BoyerMyrvoldPlanar.h.
|
inlineprotected |
Returns the successornode on the external face in given direction
.
direction
is not changed.
Definition at line 237 of file BoyerMyrvoldPlanar.h.
|
inlineprotected |
Walks upon external face in direction
avoiding short circuit edges.
direction
is not changed.
Definition at line 246 of file BoyerMyrvoldPlanar.h.
|
protected |
Creates a short circuit edge from node v
with direction v_dir
to node w
with direction w_dir
.
|
protected |
Starts the embedding phase, which embeds m_g node by node in descending DFI-order.
Returns true, if graph is planar, false otherwise.
|
protected |
Links (and embeds iff m_embeddingGrade != EmbeddingGrade::doNotEmbed) backedges from node v
with direction v_dir
to node w
with direction w_dir
.
Checks whether real node w
is externally active while embedding node with DFI v
.
Definition at line 134 of file BoyerMyrvoldPlanar.h.
void ogdf::BoyerMyrvoldPlanar::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.
c | is the unique rootchild of the bicomp |
marker | is the value which marks nodes as visited |
visited | is the array containing visiting information |
wholeGraph | Iff true, all bicomps of all connected components will be traversed |
deleteFlipFlags | Iff true, the flipping flags will be deleted after flipping |
Checks whether real node w
is inactive while embedding node with DFI v
.
Definition at line 147 of file BoyerMyrvoldPlanar.h.
Checks all dynamic information about a node w
while embedding node with DFI v
.
Definition at line 167 of file BoyerMyrvoldPlanar.h.
Checks whether real node w
is internally active while embedding node with DFI v
.
Definition at line 128 of file BoyerMyrvoldPlanar.h.
|
protected |
Merges the last two biconnected components saved in stack
. Embeds them iff m_embeddingGrade != EmbeddingGrade::doNotEmbed.
|
protected |
Merges unprocessed virtual nodes such as the dfs-roots with their real counterpart.
BoyerMyrvoldPlanar & ogdf::BoyerMyrvoldPlanar::operator= | ( | const BoyerMyrvoldPlanar & | ) |
Assignment operator is undefined!
Checks whether node w
is pertinent. w
has to be non-virtual.
Definition at line 122 of file BoyerMyrvoldPlanar.h.
|
protected |
Postprocessing of the graph, so that all virtual vertices are embedded and all bicomps are flipped.
In addition, embedding steps for parallel edges and self-loops are implemented.
Prints informations about node v
.
Definition at line 299 of file BoyerMyrvoldPlanar.h.
Seeds the random generator for performing a random DFS. If this method is never called the random generator will be seeded by a value extracted from the global random generator.
Definition at line 115 of file BoyerMyrvoldPlanar.h.
bool ogdf::BoyerMyrvoldPlanar::start | ( | ) |
Starts the embedding algorithm.
|
inlineprotected |
Walks upon external face in the given direction
starting at w
.
If none of the bicomps has been flipped then CW = clockwise and CCW = counterclockwise holds. In general, the traversaldirection could have been changed due to flipped components. If this occurs, the traversaldirection is flipped.
Definition at line 199 of file BoyerMyrvoldPlanar.h.
|
inlineprotected |
Walks upon external face in given direction
avoiding short circuit edges.
Definition at line 217 of file BoyerMyrvoldPlanar.h.
|
protected |
Walkdown: Embeds all backedges with DFI i
as targetnode to node v
.
i | is the DFI of the current vertex to embed |
v | is the virtual node being the root of the bicomp attached to i |
findKuratowskis | collects information in order to extract Kuratowski Subdivisions later |
|
protected |
Walkup: Builds the pertinent subgraph for the backedge back
.
back
is the backedge between nodes v
and w
. v
is the current node to embed. All visited nodes are marked with value marker
. The Function returns the last traversed node.
|
inlineprotected |
Checks, if one ore more wNodes exist between the two stopping vertices stopx
and stopy
.
The node root
is root of the bicomp containing the stopping vertices
Definition at line 277 of file BoyerMyrvoldPlanar.h.
Definition at line 64 of file BoyerMyrvoldPlanar.h.
|
friend |
Definition at line 63 of file BoyerMyrvoldPlanar.h.
|
friend |
Definition at line 66 of file BoyerMyrvoldPlanar.h.
|
friend |
Definition at line 65 of file BoyerMyrvoldPlanar.h.
Direction for counterclockwise traversal.
Definition at line 70 of file BoyerMyrvoldPlanar.h.
Direction for clockwise traversal.
Definition at line 73 of file BoyerMyrvoldPlanar.h.
The adjEntry which goes from DFS-parent to current vertex.
Definition at line 403 of file BoyerMyrvoldPlanar.h.
Definition at line 365 of file BoyerMyrvoldPlanar.h.
Holds information, if node is the source of a backedge.
This information refers to the adjEntries on the targetnode and is used during the walkdown
Definition at line 464 of file BoyerMyrvoldPlanar.h.
Links for short circuit edges.
If short circuit edges are introduced, the former adjEntries to the neighbors have to be saved here for embedding and merging purposes. If there is no short circuit edge, this adjEntry is nullptr.
Definition at line 400 of file BoyerMyrvoldPlanar.h.
Definition at line 361 of file BoyerMyrvoldPlanar.h.
The one and only DFI-NodeArray.
Definition at line 385 of file BoyerMyrvoldPlanar.h.
Definition at line 366 of file BoyerMyrvoldPlanar.h.
|
protected |
Contains the type of each edge.
Definition at line 411 of file BoyerMyrvoldPlanar.h.
Definition at line 362 of file BoyerMyrvoldPlanar.h.
Flag for extracting a planar subgraph instead of testing for planarity.
Definition at line 371 of file BoyerMyrvoldPlanar.h.
Iff true, the node is the root of a bicomp which has to be flipped.
The DFS-child of every bicomp root vertex is unique. if a bicomp is flipped, this DFS-child is marked to check whether the bicomp has to be flipped or not.
Definition at line 458 of file BoyerMyrvoldPlanar.h.
|
protected |
The whole number of bicomps, which have to be flipped.
Definition at line 374 of file BoyerMyrvoldPlanar.h.
|
protected |
Input graph, which can be altered.
Definition at line 357 of file BoyerMyrvoldPlanar.h.
The highest DFI in a subtree with node as root.
Definition at line 417 of file BoyerMyrvoldPlanar.h.
The DFI of the least ancestor node over all backedges.
If no backedge exists, the least ancestor is the DFI of that node itself
Definition at line 408 of file BoyerMyrvoldPlanar.h.
Definition at line 363 of file BoyerMyrvoldPlanar.h.
Links to opposite adjacency entries on external face in clockwise resp. ccw order.
m_link[0]=CCW, m_link[1]=CW
Definition at line 393 of file BoyerMyrvoldPlanar.h.
The lowpoint of each node.
Definition at line 414 of file BoyerMyrvoldPlanar.h.
Returns appropriate node from given DFI.
Definition at line 388 of file BoyerMyrvoldPlanar.h.
Stores for each (virtual) bicomp root how many backedges to its bicomp still have to be embedded.
The value is set during the walkup, and it is used and decreased while embedding backedges during the walkdown.
Definition at line 451 of file BoyerMyrvoldPlanar.h.
|
protected |
Data structure for the Kuratowski subdivisions, which will be returned.
Definition at line 470 of file BoyerMyrvoldPlanar.h.
List of virtual bicomp roots, that are pertinent to the current embedded node.
Definition at line 467 of file BoyerMyrvoldPlanar.h.
|
protected |
Pointer to node contained in the DFSChildList of his parent, if exists.
If node isn't in list or list doesn't exist, the pointer is set to nullptr.
Definition at line 427 of file BoyerMyrvoldPlanar.h.
Identifies the rootnode of the child bicomp the given backedge points to.
Definition at line 437 of file BoyerMyrvoldPlanar.h.
|
protected |
Definition at line 367 of file BoyerMyrvoldPlanar.h.
Definition at line 364 of file BoyerMyrvoldPlanar.h.
Link to non-virtual vertex of a virtual Vertex.
A virtual vertex has negative DFI of the DFS-Child of related non-virtual Vertex
Definition at line 382 of file BoyerMyrvoldPlanar.h.
A list to all separated DFS-children of node.
The list is sorted by lowpoint values (in linear time)
Definition at line 422 of file BoyerMyrvoldPlanar.h.
This Array keeps track of all vertices that are visited by current walkup.
Definition at line 434 of file BoyerMyrvoldPlanar.h.
Stores for each (real) non-root vertex v with which backedge it was visited during the walkup.
This is done to later identify the root vertex of the bicomp v belongs to.
Definition at line 444 of file BoyerMyrvoldPlanar.h.