7 #include <graybat/graphPolicy/Traits.hpp>
13 template<
typename T_GraphPolicy>
16 using GraphPolicy = T_GraphPolicy;
17 using VertexDescription = graybat::graphPolicy::VertexDescription<GraphPolicy>;
18 using EdgeDescription = graybat::graphPolicy::EdgeDescription<GraphPolicy>;
19 using GraphDescription = graybat::graphPolicy::GraphDescription<GraphPolicy>;
20 using EdgeProperty = graybat::graphPolicy::EdgeProperty<GraphPolicy>;
21 using VertexProperty = graybat::graphPolicy::VertexProperty<GraphPolicy>;
23 const unsigned dimension;
30 unsigned hammingDistance(
unsigned a,
unsigned b){
31 unsigned abXor = a xor b;
32 return (
unsigned) __builtin_popcount(abXor);
35 GraphDescription operator()(){
36 assert(dimension >= 1);
37 std::vector<EdgeDescription> edges;
39 unsigned verticesCount = pow(2, dimension);
40 std::vector<VertexDescription> vertices(verticesCount);
42 for(
unsigned i = 0; i < vertices.size(); ++i){
43 vertices.at(i) = std::make_pair(i, VertexProperty());
46 for(
unsigned i = 0; i < vertices.size(); ++i){
47 for(
unsigned j = 0; j < vertices.size(); ++j){
48 if(hammingDistance(i, j) == 1){
49 edges.push_back(std::make_pair(std::make_pair(vertices[i].first, vertices[j].first), EdgeProperty()));
55 return std::make_pair(vertices,edges);
Definition: HyperCube.hpp:14