Open
Graph Drawing
Framework

 v. 2023.09 (Elderberry)
 

Loading...
Searching...
No Matches
BoyerMyrvold.h
Go to the documentation of this file.
1
33#pragma once
34
35#include <ogdf/basic/Graph.h>
37#include <ogdf/basic/SList.h>
38#include <ogdf/basic/basic.h>
42
43namespace ogdf {
44class KuratowskiSubdivision;
45
47
140protected:
143
145 void clear() {
146 delete pBMP;
147 pBMP = nullptr;
148 }
149
152
153public:
156 pBMP = nullptr;
157 nOfStructures = 0;
158 }
159
161 ~BoyerMyrvold() { clear(); }
162
164 int numberOfStructures() { return nOfStructures; }
165
167
170 virtual bool isPlanarDestructive(Graph& g) override;
171
173
175 virtual bool isPlanar(const Graph& g) override;
176
178 virtual bool planarEmbed(Graph& G) override {
180 return planarEmbed(G, list);
181 }
182
184
192 virtual bool planarEmbedPlanarGraph(Graph& G) override {
194 return planarEmbedDestructive(G, list);
195 }
196
199 NodeArray<int>& count, EdgeArray<int>& countEdge);
200
202
205 void transform(const SList<KuratowskiWrapper>& sourceList,
206 SList<KuratowskiSubdivision>& targetList, const Graph& g,
207 const bool onlyDifferent = false);
208
210
213 void transform(const SList<KuratowskiWrapper>& sourceList,
214 SList<KuratowskiSubdivision>& targetList, const GraphCopySimple& h,
215 const bool onlyDifferent = false) {
216 transform(sourceList, targetList, h.original(), onlyDifferent);
217 }
218
220
230 bool planarEmbedDestructive(Graph& g, SList<KuratowskiWrapper>& output, int embeddingGrade,
231 bool bundles = false, bool limitStructures = false, bool randomDFSTree = false,
232 bool avoidE2Minors = true);
233
237 BoyerMyrvoldPlanar::EmbeddingGrade::doNotFind,
238 bool bundles = false, bool limitStructures = false, bool randomDFSTree = false,
239 bool avoidE2Minors = true) {
240 return planarEmbedDestructive(g, output, static_cast<int>(embeddingGrade), bundles,
241 limitStructures, randomDFSTree, avoidE2Minors);
242 }
243
245
256 bool planarEmbed(Graph& g, SList<KuratowskiWrapper>& output, int embeddingGrade,
257 bool bundles = false, bool limitStructures = false, bool randomDFSTree = false,
258 bool avoidE2Minors = true);
259
263 BoyerMyrvoldPlanar::EmbeddingGrade::doNotFind,
264 bool bundles = false, bool limitStructures = false, bool randomDFSTree = false,
265 bool avoidE2Minors = true) {
266 return planarEmbed(g, output, static_cast<int>(embeddingGrade), bundles, limitStructures,
267 randomDFSTree, avoidE2Minors);
268 }
269
271
281 bool planarEmbed(GraphCopySimple& h, SList<KuratowskiWrapper>& output, int embeddingGrade,
282 bool bundles = false, bool limitStructures = false, bool randomDFSTree = false,
283 bool avoidE2Minors = true);
284
288 BoyerMyrvoldPlanar::EmbeddingGrade::doNotFind,
289 bool bundles = false, bool limitStructures = false, bool randomDFSTree = false,
290 bool avoidE2Minors = true) {
291 return planarEmbed(h, output, static_cast<int>(embeddingGrade), bundles, limitStructures,
292 randomDFSTree, avoidE2Minors);
293 }
294};
295
296}
Declaration of the class BoyerMyrvoldPlanar.
Declaration of the class ExtractKuratowskis.
Includes declaration of graph class.
Declaration of graph copy classes.
Declaration of PlanarityModule.
Declaration of singly linked lists and iterators.
Basic declarations, included by all source files.
Wrapper class used for preprocessing and valid invocation of the planarity test.
bool planarEmbedDestructive(Graph &g, SList< KuratowskiWrapper > &output, BoyerMyrvoldPlanar::EmbeddingGrade embeddingGrade=BoyerMyrvoldPlanar::EmbeddingGrade::doNotFind, bool bundles=false, bool limitStructures=false, bool randomDFSTree=false, bool avoidE2Minors=true)
Returns an embedding, if g is planar and Kuratowski Subdivisions otherwise.
BoyerMyrvold()
Constructor.
bool planarEmbed(GraphCopySimple &h, SList< KuratowskiWrapper > &output, int embeddingGrade, bool bundles=false, bool limitStructures=false, bool randomDFSTree=false, bool avoidE2Minors=true)
Returns an embedding, if graph copy h is planar and Kuratowski Subdivisions otherwise.
void transform(const KuratowskiWrapper &source, KuratowskiSubdivision &target, NodeArray< int > &count, EdgeArray< int > &countEdge)
Transforms KuratowskiWrapper in KuratowskiSubdivision.
bool planarEmbedDestructive(Graph &g, SList< KuratowskiWrapper > &output, int embeddingGrade, bool bundles=false, bool limitStructures=false, bool randomDFSTree=false, bool avoidE2Minors=true)
Returns an embedding, if g is planar and Kuratowski Subdivisions otherwise.
void clear()
Deletes BoyerMyrvoldPlanar on heap.
virtual bool isPlanarDestructive(Graph &g) override
Returns true, iff g is planar.
~BoyerMyrvold()
Destructor.
int nOfStructures
The number of extracted Structures for statistical purposes.
bool planarEmbed(Graph &g, SList< KuratowskiWrapper > &output, BoyerMyrvoldPlanar::EmbeddingGrade embeddingGrade=BoyerMyrvoldPlanar::EmbeddingGrade::doNotFind, bool bundles=false, bool limitStructures=false, bool randomDFSTree=false, bool avoidE2Minors=true)
Returns an embedding, if g is planar and Kuratowski Subdivisions otherwise.
BoyerMyrvoldPlanar * pBMP
Class BoyerMyrvoldPlanar on heap.
virtual bool planarEmbed(Graph &G) override
Returns true, if G is planar, false otherwise. If true, G contains a planar embedding.
bool planarEmbed(Graph &g, SList< KuratowskiWrapper > &output, int embeddingGrade, bool bundles=false, bool limitStructures=false, bool randomDFSTree=false, bool avoidE2Minors=true)
Returns an embedding, if g is planar and Kuratowski Subdivisions otherwise.
int numberOfStructures()
The number of extracted Structures for statistical purposes.
bool planarEmbed(GraphCopySimple &h, SList< KuratowskiWrapper > &output, BoyerMyrvoldPlanar::EmbeddingGrade embeddingGrade=BoyerMyrvoldPlanar::EmbeddingGrade::doNotFind, bool bundles=false, bool limitStructures=false, bool randomDFSTree=false, bool avoidE2Minors=true)
Returns an embedding, if graph copy h is planar and Kuratowski Subdivisions otherwise.
void transform(const SList< KuratowskiWrapper > &sourceList, SList< KuratowskiSubdivision > &targetList, const GraphCopySimple &h, const bool onlyDifferent=false)
Transforms KuratowskiWrapper-List in KuratowskiSubdivision-List with respect to sieving constraints.
virtual bool isPlanar(const Graph &g) override
Returns true, iff a copy of the constant graph g is planar.
void transform(const SList< KuratowskiWrapper > &sourceList, SList< KuratowskiSubdivision > &targetList, const Graph &g, const bool onlyDifferent=false)
Transforms KuratowskiWrapper-List in KuratowskiSubdivision-List with respect to sieving constraints.
virtual bool planarEmbedPlanarGraph(Graph &G) override
Constructs a planar embedding of G. G has to be planar!
This class implements the extended BoyerMyrvold planarity embedding algorithm.
EmbeddingGrade
Denotes the different embedding options.
const Graph & original() const
Returns a reference to the original graph.
Definition GraphCopy.h:104
Copies of graphs with mapping between nodes and edges.
Definition GraphCopy.h:260
Data type for general directed graphs (adjacency list representation).
Definition Graph_d.h:866
Wrapper-class for Kuratowski Subdivisions containing the minortype and edgelist.
Module for planarity testing and planar embeddings.
Singly linked lists (maintaining the length of the list).
Definition SList.h:845
RegisteredArray for edges of a graph, specialized for EdgeArray<edge>.
Definition Graph_d.h:717
RegisteredArray for nodes, edges and adjEntries of a graph.
Definition Graph_d.h:659
#define OGDF_EXPORT
Specifies that a function or class is exported by the OGDF dynamic library (shared object / DLL),...
Definition config.h:117
bool planarEmbed(Graph &G)
Returns true, if G is planar, false otherwise. If true is returned, G will be planarly embedded.
The namespace for all OGDF objects.