22#include <bliss/abstractgraph.hh>
72 void add_edge(
const unsigned int other_vertex);
73 void remove_duplicate_edges(std::vector<bool>& tmp);
77 std::vector<unsigned int> edges;
78 unsigned int nof_edges()
const {
return edges.size(); }
80 std::vector<Vertex> vertices;
82 void remove_duplicate_edges();
89 static unsigned int vertex_color_invariant(
const Graph*
const g,
90 const unsigned int v);
98 static unsigned int degree_invariant(
const Graph*
const g,
99 const unsigned int v);
106 static unsigned int selfloop_invariant(
const Graph*
const g,
107 const unsigned int v);
110 bool refine_according_to_invariant(
unsigned int (*inv)(
const Graph*
const g,
111 const unsigned int v));
116 bool split_neighbourhood_of_unit_cell(Partition::Cell *
const);
117 bool split_neighbourhood_of_cell(Partition::Cell *
const);
122 bool is_equitable()
const;
126 Partition::Cell* find_next_cell_to_be_splitted(Partition::Cell *cell);
127 Partition::Cell* sh_first();
128 Partition::Cell* sh_first_smallest();
129 Partition::Cell* sh_first_largest();
130 Partition::Cell* sh_first_max_neighbours();
131 Partition::Cell* sh_first_smallest_max_neighbours();
132 Partition::Cell* sh_first_largest_max_neighbours();
139 std::vector<Partition::Cell*> _neighbour_cells;
141 void make_initial_equitable_partition();
143 void initialize_certificate();
147 bool nucr_find_first_component(
const unsigned int level);
148 bool nucr_find_first_component(
const unsigned int level,
149 std::vector<unsigned int>& component,
150 unsigned int& component_elements,
151 Partition::Cell*& sh_return);
160 Graph(
const unsigned int N = 0);
198 void write_dot(
const char*
const file_name);
219 Graph*
permute(
const std::vector<unsigned int>& perm)
const;
234 unsigned int add_vertex(
const unsigned int color = 0);
242 void add_edge(
const unsigned int v1,
const unsigned int v2);
247 unsigned int get_color(
const unsigned int vertex)
const;
252 void change_color(
const unsigned int vertex,
const unsigned int color);
An abstract base class for different types of graphs.
Definition: abstractgraph.hh:48
The class for undirected, vertex colored graphs.
Definition: graph.hh:32
void add_edge(const unsigned int v1, const unsigned int v2)
Definition: graph.cc:115
Graph * copy() const
Definition: graph.cc:141
SplittingHeuristic
Definition: graph.hh:42
@ shs_f
Definition: graph.hh:46
@ shs_fl
Definition: graph.hh:52
@ shs_fsm
Definition: graph.hh:60
@ shs_fm
Definition: graph.hh:56
@ shs_fs
Definition: graph.hh:49
@ shs_flm
Definition: graph.hh:64
void set_splitting_heuristic(const SplittingHeuristic shs)
Definition: graph.hh:276
unsigned int get_nof_vertices() const
Definition: graph.hh:210
int cmp(Graph &other)
Definition: graph.cc:377
void write_dimacs(FILE *const fp)
Definition: graph.cc:327
unsigned int get_color(const unsigned int vertex) const
Definition: graph.cc:126
static Graph * read_dimacs(FILE *const fp, FILE *const errstr=stderr)
Definition: graph.cc:165
void change_color(const unsigned int vertex, const unsigned int color)
Definition: graph.cc:132
bool is_automorphism(unsigned int *const perm) const
Definition: graph.cc:1387
Graph * permute(const unsigned int *const perm) const
Definition: graph.cc:450
Graph(const unsigned int N=0)
Definition: graph.cc:91
void write_dot(FILE *const fp)
Definition: graph.cc:498
virtual unsigned int get_hash()
Definition: graph.cc:539
~Graph()
Definition: graph.cc:98
unsigned int add_vertex(const unsigned int color=0)
Definition: graph.cc:105
Definition: abstractgraph.cc:35