CkPttn 1.2.4
Loading...
Searching...
No Matches
vertex.hpp
Go to the documentation of this file.
1
11#ifndef CKPTTN_MIDLEVEL_VERTEX_HPP
12#define CKPTTN_MIDLEVEL_VERTEX_HPP
13
14#include <iostream>
15#include <vector>
16
24class MidVertex {
25 public:
30 explicit MidVertex(const std::vector<int>& x);
31
32 const std::vector<int>& get_bits() const { return bits_; }
33 int& operator[](int i) { return this->bits_[i]; }
34 const int& operator[](int i) const { return this->bits_[i]; }
35 int size() { return static_cast<int>(this->bits_.size()); }
36 int size() const { return static_cast<int>(this->bits_.size()); }
37
38 void rev_inv();
39 bool is_first_vertex() const;
40 bool is_last_vertex() const;
43 void compute_flip_seq_0(std::vector<int>& seq, bool flip);
44 void compute_flip_seq_1(std::vector<int>& seq) const;
45
46 private:
47 std::vector<int> bits_;
48 void rev_inv(int left, int right);
49 int first_touchdown(int a) const;
50 int first_dive() const;
51 void steps_height(std::vector<std::vector<int>>& usteps_neg,
52 std::vector<std::vector<int>>& usteps_pos,
53 std::vector<std::vector<int>>& dsteps_neg,
54 std::vector<std::vector<int>>& dsteps_pos) const;
55 int count_flaws() const;
56 int count_ones() const;
57 void compute_flip_seq_0_rec(std::vector<int>& seq, int& idx, int left, int right,
58 int* next_step) const;
59 void compute_flip_seq_1_rec(std::vector<int>& seq, int& idx, int left, int right,
60 int* next_step) const;
61 void aux_pointers(int a, int b, int* next_step) const;
62};
63
65inline bool operator==(const MidVertex& lhs, const MidVertex& rhs) {
66 return lhs.get_bits() == rhs.get_bits();
67}
69inline bool operator!=(const MidVertex& lhs, const MidVertex& rhs) { return !operator==(lhs, rhs); }
71std::ostream& operator<<(std::ostream& os, const MidVertex& v);
72
74bool bitstrings_less_than(const int* x, const int* y, int length);
76bool bitstrings_equal(const int* x, const int* y, int length);
77
78#endif
Bitstring vertex for middle-levels Gray code algorithm.
Definition vertex.hpp:24
void compute_flip_seq_0(std::vector< int > &seq, bool flip)
int size()
Definition vertex.hpp:35
const int & operator[](int i) const
Definition vertex.hpp:34
int to_last_vertex()
void rev_inv()
const std::vector< int > & get_bits() const
Definition vertex.hpp:32
void compute_flip_seq_1(std::vector< int > &seq) const
int & operator[](int i)
Definition vertex.hpp:33
bool is_first_vertex() const
int to_first_vertex()
bool is_last_vertex() const
int size() const
Definition vertex.hpp:36
MidVertex(const std::vector< int > &x)
Construct a MidVertex from a bitstring vector.
bool operator!=(const MidVertex &lhs, const MidVertex &rhs)
Inequality comparison for MidVertex.
Definition vertex.hpp:69
bool bitstrings_less_than(const int *x, const int *y, int length)
Lexicographic comparison of bitstrings.
bool operator==(const MidVertex &lhs, const MidVertex &rhs)
Equality comparison for MidVertex.
Definition vertex.hpp:65
bool bitstrings_equal(const int *x, const int *y, int length)
Equality comparison of bitstrings.
std::ostream & operator<<(std::ostream &os, const MidVertex &v)
Stream output operator for MidVertex.