Loading...
Searching...
No Matches
cage_canon.hpp
Go to the documentation of this file.
1#ifndef SEAMS_CAGE_CANON_H_
2#define SEAMS_CAGE_CANON_H_
3
4#include <string>
5#include <utility>
6#include <vector>
7
8// Nauty (McKay and Piperno, J. Symbolic Comput. 60, 94 (2014);
9// 10.1016/j.jsc.2013.09.003) produces a canonical adjacency certificate
10// for the undirected graph of a ring set. findHC/findDDC stay the
11// enumerators; this is the label-independent signature.
12
13namespace cage {
14
16
17// Hex encoding of the canonical adjacency matrix. Empty if nauty is
18// off or the ring set has no vertices.
19std::string canonicalCertificate(const std::vector<std::vector<int>> &rings);
20
21// True when the ring graph is isomorphic to the hexagonal prism (HC).
22bool isHexagonalPrism(const std::vector<std::vector<int>> &rings);
23
24bool sameCertificate(const std::vector<std::vector<int>> &a,
25 const std::vector<std::vector<int>> &b);
26
27// Certificate of an arbitrary graph on n local vertices given by its edge
28// list, with vertex `root` in its own colour cell so that rooted
29// neighbourhoods with different centres get different certificates
30// (root < 0 colours nothing). Empty if nauty is off, n is zero, or n
31// exceeds the dense-graph limit.
33 const std::vector<std::pair<int, int>> &edges,
34 int root);
35
36// The same with a colour per vertex (an integer class such as the atom
37// type): vertices of different colours never map onto each other, and the
38// root still sits in a cell of its own. `colours` may be empty.
40 const std::vector<std::pair<int, int>> &edges,
41 const std::vector<int> &colours, int root);
42
43} // namespace cage
44
45#endif
Functions for topological network criteria cage types.
Definition cage.hpp:47
std::string canonicalCertificateRooted(int n, const std::vector< std::pair< int, int > > &edges, int root)
bool isHexagonalPrism(const std::vector< std::vector< int > > &rings)
std::string canonicalCertificate(const std::vector< std::vector< int > > &rings)
std::string canonicalCertificateColoured(int n, const std::vector< std::pair< int, int > > &edges, const std::vector< int > &colours, int root)
bool sameCertificate(const std::vector< std::vector< int > > &a, const std::vector< std::vector< int > > &b)
bool nautyAvailable()