Open
Graph Drawing
Framework

 v. 2023.09 (Elderberry)
 

CoffmanGrahamRanking.h
Go to the documentation of this file.
1 
33 #pragma once
34 
35 #include <ogdf/basic/NodeArray.h>
36 #include <ogdf/basic/tuples.h>
39 
40 #include <memory>
41 
42 namespace ogdf {
43 
45 
54 public:
57 
58 
64  virtual void call(const Graph& G, NodeArray<int>& rank) override;
66 
72  void setSubgraph(AcyclicSubgraphModule* pSubgraph) { m_subgraph.reset(pSubgraph); }
74 
76 
78  int width() const { return m_w; }
79 
81  void width(int w) { m_w = w; }
82 
83 
84 private:
85  // CoffmanGraham data structures
86  class _int_set {
87  int* m_array;
88  int m_length;
89  int m_index;
90 
91  public:
92  _int_set() : m_array(nullptr), m_length(0), m_index(0) { }
93 
94  explicit _int_set(int len) : m_array(nullptr), m_length(len), m_index(len) {
95  if (len > 0) {
96  m_array = new int[m_length];
97  }
98  }
99 
100  ~_int_set() { delete[] m_array; }
101 
102  void init(int len) {
103  delete m_array;
104  if ((m_length = len) == 0) {
105  m_array = nullptr;
106  } else {
107  m_array = new int[m_length];
108  }
109  m_index = len;
110  }
111 
112  int length() const { return m_length; }
113 
114  int operator[](int i) const { return m_array[i]; }
115 
116  void insert(int x) { m_array[--m_index] = x; }
117 
118  bool ready() const { return m_index == 0; }
119  };
120 
121  // CoffmanGraham members
122  std::unique_ptr<AcyclicSubgraphModule> m_subgraph;
123  int m_w;
125 
126  // dfs members
128 
129  // CoffmanGraham funktions
130  void insert(node u, List<Tuple2<node, int>>& ready_nodes);
131  void insert(node u, List<node>& ready, const NodeArray<int>& pi);
132 
133  // dfs funktions
134  void removeTransitiveEdges(Graph& G);
135  void dfs(node v);
136 };
137 
138 }
ogdf::CoffmanGrahamRanking::_int_set::init
void init(int len)
Definition: CoffmanGrahamRanking.h:102
ogdf
The namespace for all OGDF objects.
Definition: AugmentationModule.h:36
ogdf::CoffmanGrahamRanking::_int_set::m_index
int m_index
Definition: CoffmanGrahamRanking.h:89
ogdf::CoffmanGrahamRanking::_int_set::_int_set
_int_set(int len)
Definition: CoffmanGrahamRanking.h:94
RankingModule.h
Declaration of interface for ranking algorithms.
ogdf::CoffmanGrahamRanking::_int_set::_int_set
_int_set()
Definition: CoffmanGrahamRanking.h:92
ogdf::Tuple2
Tuples of two elements (2-tuples).
Definition: tuples.h:46
ogdf::CoffmanGrahamRanking::width
int width() const
Get for the with.
Definition: CoffmanGrahamRanking.h:78
ogdf::CoffmanGrahamRanking::m_mark
NodeArray< int > m_mark
Definition: CoffmanGrahamRanking.h:127
ogdf::RankingModule
Interface of algorithms for computing a node ranking.
Definition: RankingModule.h:44
ogdf::CoffmanGrahamRanking::width
void width(int w)
Set for the with.
Definition: CoffmanGrahamRanking.h:81
AcyclicSubgraphModule.h
Declaration of interface for acyclic subgraph algorithms.
ogdf::CoffmanGrahamRanking::_int_set::~_int_set
~_int_set()
Definition: CoffmanGrahamRanking.h:100
ogdf::CoffmanGrahamRanking::_int_set::ready
bool ready() const
Definition: CoffmanGrahamRanking.h:118
ogdf::CoffmanGrahamRanking::_int_set::length
int length() const
Definition: CoffmanGrahamRanking.h:112
ogdf::CoffmanGrahamRanking::m_w
int m_w
Definition: CoffmanGrahamRanking.h:123
ogdf::CoffmanGrahamRanking::_int_set::m_array
int * m_array
Definition: CoffmanGrahamRanking.h:87
ogdf::List
Doubly linked lists (maintaining the length of the list).
Definition: List.h:42
ogdf::internal::GraphRegisteredArray
RegisteredArray for nodes, edges and adjEntries of a graph.
Definition: Graph_d.h:651
ogdf::Graph
Data type for general directed graphs (adjacency list representation).
Definition: Graph_d.h:862
ogdf::CoffmanGrahamRanking::_int_set::m_length
int m_length
Definition: CoffmanGrahamRanking.h:88
ogdf::Math::pi
constexpr double pi
The constant .
Definition: Math.h:59
ogdf::CoffmanGrahamRanking::m_s
NodeArray< _int_set > m_s
Definition: CoffmanGrahamRanking.h:124
ogdf::CoffmanGrahamRanking
The coffman graham ranking algorithm.
Definition: CoffmanGrahamRanking.h:53
ogdf::CoffmanGrahamRanking::m_subgraph
std::unique_ptr< AcyclicSubgraphModule > m_subgraph
Definition: CoffmanGrahamRanking.h:122
NodeArray.h
Declaration and implementation of NodeArray class.
ogdf::CoffmanGrahamRanking::_int_set
Definition: CoffmanGrahamRanking.h:86
OGDF_EXPORT
#define OGDF_EXPORT
Specifies that a function or class is exported by the OGDF DLL.
Definition: config.h:101
ogdf::AcyclicSubgraphModule
Base class of algorithms for computing a maximal acyclic subgraph.
Definition: AcyclicSubgraphModule.h:43
ogdf::CoffmanGrahamRanking::_int_set::insert
void insert(int x)
Definition: CoffmanGrahamRanking.h:116
ogdf::CoffmanGrahamRanking::_int_set::operator[]
int operator[](int i) const
Definition: CoffmanGrahamRanking.h:114
ogdf::NodeElement
Class for the representation of nodes.
Definition: Graph_d.h:233
tuples.h
Declaration and implementation of class Tuple2, Tuple3 and Tuple4.