7 #include <graybat/graphPolicy/Traits.hpp>
14 template<
typename T_GraphPolicy>
17 using GraphPolicy = T_GraphPolicy;
18 using VertexDescription = graybat::graphPolicy::VertexDescription<GraphPolicy>;
19 using EdgeDescription = graybat::graphPolicy::EdgeDescription<GraphPolicy>;
20 using GraphDescription = graybat::graphPolicy::GraphDescription<GraphPolicy>;
21 using EdgeProperty = graybat::graphPolicy::EdgeProperty<GraphPolicy>;
22 using VertexProperty = graybat::graphPolicy::VertexProperty<GraphPolicy>;
24 const unsigned height;
27 GridDiagonal(
const unsigned height,
const unsigned width) :
33 GraphDescription operator()(){
34 const unsigned verticesCount = height * width;
35 std::vector<VertexDescription> vertices(verticesCount);
36 std::vector<EdgeDescription > edges;
38 for(
unsigned i = 0; i < vertices.size(); ++i){
39 vertices.at(i) = std::make_pair(i, VertexProperty());
42 for(
unsigned i = 0; i < vertices.size(); ++i){
46 unsigned up = i - width;
47 edges.push_back(std::make_pair(std::make_pair(vertices[i].first, vertices[up].first), EdgeProperty()));
51 if(i >= width and (i % width) != 0){
52 unsigned up_left = i - width - 1;
53 edges.push_back(std::make_pair(std::make_pair(vertices[i].first, vertices[up_left].first), EdgeProperty()));
57 if(i >= width and (i % width) != (width - 1)){
58 unsigned up_right = i - width + 1;
59 edges.push_back(std::make_pair(std::make_pair(vertices[i].first, vertices[up_right].first), EdgeProperty()));
63 if(i < (verticesCount - width)){
64 unsigned down = i + width;
65 edges.push_back(std::make_pair(std::make_pair(vertices[i].first, vertices[down].first), EdgeProperty()));
69 if(i < (verticesCount - width) and (i % width) != 0){
70 unsigned down_left = i + width - 1;
71 edges.push_back(std::make_pair(std::make_pair(vertices[i].first, vertices[down_left].first), EdgeProperty()));
75 if(i < (verticesCount - width) and (i % width) != (width - 1)){
76 unsigned down_right = i + width + 1;
77 edges.push_back(std::make_pair(std::make_pair(vertices[i].first, vertices[down_right].first), EdgeProperty()));
81 if((i % width) != (width - 1)){
83 edges.push_back(std::make_pair(std::make_pair(vertices[i].first, vertices[right].first), EdgeProperty()));
89 edges.push_back(std::make_pair(std::make_pair(vertices[i].first, vertices[left].first), EdgeProperty()));
93 return std::make_pair(vertices,edges);
Definition: GridDiagonal.hpp:15