Open
Graph Drawing
Framework

 v. 2023.09 (Elderberry)
 

HananiTutteCPlanarity.h
Go to the documentation of this file.
1 
33 #pragma once
34 
37 
38 namespace ogdf {
39 
40 
42 
46  class CLinearSystem;
47  class CGraph;
48 
49 public:
50  struct Stats {
51  int nRows = 0;
52  int nColumns = 0;
53  int nConditions = 0;
54  int nMoves = 0;
55 
56  int64_t tPrepare = 0;
57  int64_t tCreateSparse = 0;
58  int64_t tSolve = 0;
59  int64_t tCheck = 0;
60  };
61 
63  virtual ~HananiTutteSolver() = default;
64  virtual bool test(Stats& stats) = 0;
65  virtual bool verify(Stats& stats) = 0;
66  };
67 
68  enum class Solver { HananiTutte, HananiTutteVerify, ILP };
69  enum class Status {
70  invalid,
71  emptyAfterPreproc,
72  cConnectedAfterPreproc,
73  nonPlanarAfterPreproc,
74  applyHananiTutte,
75  applyILP,
76  timeoutILP,
77  errorILP
78  };
79  enum class Verification {
80  cPlanar,
81  cPlanarVerified,
82  nonCPlanarVerified,
83  verificationFailed,
84  timeout
85  };
86 
87  enum class Type : uint16_t { tVertex, tEdge };
88  enum class SubType : uint16_t {
89  stVertex,
90  stCluster,
91  stEdge,
92  stInnerCluster,
93  stOuterCluster,
94  stVertexCluster,
95  stClusterCluster,
96  stCrossCluster
97  };
98 
99  bool isClusterPlanar(const ClusterGraph& CG) override {
100  Verification res = isCPlanar(CG, true, false, Solver::HananiTutteVerify);
101  if (res == Verification::cPlanar || res == Verification::cPlanarVerified) {
102  return true;
103  } else if (res == Verification::nonCPlanarVerified) {
104  return false;
105  } else {
106  throw std::runtime_error("Could not solve instance!");
107  }
108  }
109 
111  return isClusterPlanar(CG);
112  }
113 
114  Verification isCPlanar(const ClusterGraph& C, bool doPreproc = true, bool forceSolver = false,
115  Solver solver = Solver::HananiTutte);
116 
117  Status status() const { return m_status; }
118 
120  static void preprocessing(ClusterGraph& C, Graph& G);
121 
122  int numNodesPreproc() const { return m_numNodesPreproc; }
123 
124  int numEdgesPreproc() const { return m_numEdgesPreproc; }
125 
126  int numClustersPreproc() const { return m_numClustersPreproc; }
127 
128  int numMatrixRows() const { return m_stats.nRows; }
129 
130  int numMatrixCols() const { return m_stats.nColumns; }
131 
132  int64_t timePrepare() const { return m_stats.tPrepare; }
133 
134  int64_t timeCreateSparse() const { return m_stats.tCreateSparse; }
135 
136  int64_t timesolve() const { return m_stats.tSolve; }
137 
138  const Stats& stats() const { return m_stats; }
139 
140  static HananiTutteSolver* getSolver(const ClusterGraph& C);
141 
142 private:
144  Status m_status = Status::invalid;
145  int m_numNodesPreproc = 0;
146  int m_numEdgesPreproc = 0;
147  int m_numClustersPreproc = 0;
148 };
149 
150 
151 }
ogdf
The namespace for all OGDF objects.
Definition: AugmentationModule.h:36
ogdf::HananiTutteCPlanarity::timesolve
int64_t timesolve() const
Definition: HananiTutteCPlanarity.h:136
ogdf::HananiTutteCPlanarity::m_stats
Stats m_stats
Definition: HananiTutteCPlanarity.h:143
ogdf::HananiTutteCPlanarity::numNodesPreproc
int numNodesPreproc() const
Definition: HananiTutteCPlanarity.h:122
ogdf::HananiTutteCPlanarity::status
Status status() const
Definition: HananiTutteCPlanarity.h:117
ClusterPlanarityModule.h
Declaration of ClusterPlanarityModule which implements a cluster-planarity test and,...
ogdf::HananiTutteCPlanarity::Verification
Verification
Definition: HananiTutteCPlanarity.h:79
ogdf::HananiTutteCPlanarity::numClustersPreproc
int numClustersPreproc() const
Definition: HananiTutteCPlanarity.h:126
ogdf::HananiTutteCPlanarity::Type
Type
Definition: HananiTutteCPlanarity.h:87
ogdf::HananiTutteCPlanarity::HananiTutteSolver
Definition: HananiTutteCPlanarity.h:62
ogdf::HananiTutteCPlanarity::isClusterPlanar
bool isClusterPlanar(const ClusterGraph &CG) override
Returns true, if CG is cluster-planar, false otherwise.
Definition: HananiTutteCPlanarity.h:99
ogdf::Graph
Data type for general directed graphs (adjacency list representation).
Definition: Graph_d.h:862
ogdf::HananiTutteCPlanarity::numEdgesPreproc
int numEdgesPreproc() const
Definition: HananiTutteCPlanarity.h:124
ogdf::HananiTutteCPlanarity::timeCreateSparse
int64_t timeCreateSparse() const
Definition: HananiTutteCPlanarity.h:134
ogdf::HananiTutteCPlanarity::timePrepare
int64_t timePrepare() const
Definition: HananiTutteCPlanarity.h:132
ogdf::HananiTutteCPlanarity::Solver
Solver
Definition: HananiTutteCPlanarity.h:68
ogdf::HananiTutteCPlanarity::Status
Status
Definition: HananiTutteCPlanarity.h:69
ogdf::HananiTutteCPlanarity
C-planarity testing via Hanani-Tutte approach.
Definition: HananiTutteCPlanarity.h:45
OGDF_EXPORT
#define OGDF_EXPORT
Specifies that a function or class is exported by the OGDF DLL.
Definition: config.h:101
ogdf::HananiTutteCPlanarity::Stats
Definition: HananiTutteCPlanarity.h:50
ClusterGraph.h
Derived class of GraphObserver providing additional functionality to handle clustered graphs.
ogdf::HananiTutteCPlanarity::isClusterPlanarDestructive
bool isClusterPlanarDestructive(ClusterGraph &CG, Graph &G) override
Returns true, if CG is cluster-planar, false otherwise. In it is non-cluster-planar,...
Definition: HananiTutteCPlanarity.h:110
ogdf::HananiTutteCPlanarity::SubType
SubType
Definition: HananiTutteCPlanarity.h:88
ogdf::HananiTutteCPlanarity::stats
const Stats & stats() const
Definition: HananiTutteCPlanarity.h:138
ogdf::ClusterGraph
Representation of clustered graphs.
Definition: ClusterGraph.h:339
ogdf::ClusterPlanarityModule
Definition: ClusterPlanarityModule.h:41
ogdf::HananiTutteCPlanarity::numMatrixCols
int numMatrixCols() const
Definition: HananiTutteCPlanarity.h:130
ogdf::HananiTutteCPlanarity::numMatrixRows
int numMatrixRows() const
Definition: HananiTutteCPlanarity.h:128