Open
Graph Drawing
Framework

 v. 2023.09 (Elderberry)
 

CrossingMinimizationModule.h
Go to the documentation of this file.
1 
32 #pragma once
33 
34 #include <ogdf/basic/Module.h>
35 #include <ogdf/basic/Timeouter.h>
36 #include <ogdf/planarity/PlanRep.h>
37 
38 namespace ogdf {
39 
42 public:
45 
48 
51 
53  virtual CrossingMinimizationModule* clone() const = 0;
54 
56 
70  ReturnType call(PlanRep& pr, int cc, int& crossingNumber,
71  const EdgeArray<int>* pCostOrig = nullptr,
72  const EdgeArray<bool>* pForbiddenOrig = nullptr,
73  const EdgeArray<uint32_t>* pEdgeSubGraphs = nullptr) {
74  return doCall(pr, cc, pCostOrig, pForbiddenOrig, pEdgeSubGraphs, crossingNumber);
75  }
76 
78 
92  ReturnType operator()(PlanRep& pr, int cc, int& crossingNumber,
93  const EdgeArray<int>* pCostOrig = nullptr,
94  const EdgeArray<bool>* pForbiddenOrig = nullptr,
95  const EdgeArray<uint32_t>* pEdgeSubGraphs = nullptr) {
96  return call(pr, cc, crossingNumber, pCostOrig, pForbiddenOrig, pEdgeSubGraphs);
97  }
98 
99 protected:
101 
115  virtual ReturnType doCall(PlanRep& pr, int cc, const EdgeArray<int>* pCostOrig,
116  const EdgeArray<bool>* pForbiddenOrig, const EdgeArray<uint32_t>* pEdgeSubGraphs,
117  int& crossingNumber) = 0;
118 
129  static int computeCrossingNumber(GraphCopy& graphCopy, const EdgeArray<int>* pCost,
130  const EdgeArray<uint32_t>* pEdgeSubGraphs) {
131  if (pCost == nullptr) {
132  return graphCopy.numberOfNodes() - graphCopy.original().numberOfNodes();
133  } else {
134  int crossingNumber = 0;
135  for (node v : graphCopy.nodes) {
136  if (graphCopy.isDummy(v)) {
137  // Dummy node (crossing) found, calculate its cost.
138  edge e1 = graphCopy.original(v->firstAdj()->theEdge());
139  edge e2 = graphCopy.original(v->lastAdj()->theEdge());
140  if (pEdgeSubGraphs != nullptr) {
141  int subgraphCounter = 0;
142  for (int i = 0; i < 32; i++) {
143  if (((*pEdgeSubGraphs)[e1] & (1 << i)) != 0
144  && ((*pEdgeSubGraphs)[e2] & (1 << i)) != 0) {
145  subgraphCounter++;
146  }
147  }
148  crossingNumber += (subgraphCounter * (*pCost)[e1] * (*pCost)[e2]);
149  } else {
150  crossingNumber += (*pCost)[e1] * (*pCost)[e2];
151  }
152  }
153  }
154  return crossingNumber;
155  }
156  }
157 
159 };
160 
161 }
ogdf
The namespace for all OGDF objects.
Definition: AugmentationModule.h:36
ogdf::PlanRep
Planarized representations (of a connected component) of a graph.
Definition: PlanRep.h:57
ogdf::CrossingMinimizationModule
Base class for crossing minimization algorithms.
Definition: CrossingMinimizationModule.h:41
ogdf::NodeElement::lastAdj
adjEntry lastAdj() const
Returns the last entry in the adjacency list.
Definition: Graph_d.h:282
ogdf::GraphCopyBase::isDummy
bool isDummy(node v) const
Returns true iff v has no corresponding node in the original graph.
Definition: GraphCopy.h:166
ogdf::GraphCopy
Copies of graphs supporting edge splitting.
Definition: GraphCopy.h:384
PlanRep.h
Declaration of a base class for planar representations of graphs and cluster graphs.
Timeouter.h
Declares base class for modules with timeout functionality.
ogdf::CrossingMinimizationModule::operator()
ReturnType operator()(PlanRep &pr, int cc, int &crossingNumber, const EdgeArray< int > *pCostOrig=nullptr, const EdgeArray< bool > *pForbiddenOrig=nullptr, const EdgeArray< uint32_t > *pEdgeSubGraphs=nullptr)
Computes a planarized representation of the input graph.
Definition: CrossingMinimizationModule.h:92
ogdf::AdjElement::theEdge
edge theEdge() const
Returns the edge associated with this adjacency entry.
Definition: Graph_d.h:153
ogdf::Graph::nodes
internal::GraphObjectContainer< NodeElement > nodes
The container containing all node objects.
Definition: Graph_d.h:924
OGDF_MALLOC_NEW_DELETE
#define OGDF_MALLOC_NEW_DELETE
Makes the class use malloc for memory allocation.
Definition: memory.h:91
ogdf::Graph::numberOfNodes
int numberOfNodes() const
Returns the number of nodes in the graph.
Definition: Graph_d.h:974
ogdf::Module
Base class for modules.
Definition: Module.h:47
ogdf::CrossingMinimizationModule::computeCrossingNumber
static int computeCrossingNumber(GraphCopy &graphCopy, const EdgeArray< int > *pCost, const EdgeArray< uint32_t > *pEdgeSubGraphs)
Computes the (weighted) crossing number of the planarization graphCopy.
Definition: CrossingMinimizationModule.h:129
ogdf::CrossingMinimizationModule::call
ReturnType call(PlanRep &pr, int cc, int &crossingNumber, const EdgeArray< int > *pCostOrig=nullptr, const EdgeArray< bool > *pForbiddenOrig=nullptr, const EdgeArray< uint32_t > *pEdgeSubGraphs=nullptr)
Computes a planarized representation of the input graph.
Definition: CrossingMinimizationModule.h:70
ogdf::CrossingMinimizationModule::CrossingMinimizationModule
CrossingMinimizationModule()
Initializes a crossing minimization module (default constructor).
Definition: CrossingMinimizationModule.h:44
OGDF_EXPORT
#define OGDF_EXPORT
Specifies that a function or class is exported by the OGDF DLL.
Definition: config.h:101
ogdf::NodeElement::firstAdj
adjEntry firstAdj() const
Returns the first entry in the adjaceny list.
Definition: Graph_d.h:279
ogdf::CrossingMinimizationModule::CrossingMinimizationModule
CrossingMinimizationModule(const CrossingMinimizationModule &cmm)
Initializes an crossing minimization module (copy constructor).
Definition: CrossingMinimizationModule.h:47
ogdf::EdgeElement
Class for the representation of edges.
Definition: Graph_d.h:356
ogdf::CrossingMinimizationModule::~CrossingMinimizationModule
virtual ~CrossingMinimizationModule()
Destructor.
Definition: CrossingMinimizationModule.h:50
ogdf::Timeouter
class for timeout funtionality.
Definition: Timeouter.h:46
Module.h
Declares base class for all module types.
ogdf::Module::ReturnType
ReturnType
The return type of a module.
Definition: Module.h:50
ogdf::NodeElement
Class for the representation of nodes.
Definition: Graph_d.h:233
ogdf::GraphCopyBase::original
const Graph & original() const
Returns a reference to the original graph.
Definition: GraphCopy.h:98
ogdf::internal::EdgeArrayBase2
RegisteredArray for edges of a graph, specialized for EdgeArray<edge>.
Definition: Graph_d.h:709