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 height;
26 Grid(
const unsigned height,
const unsigned width) :
32 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){
44 unsigned up = i - width;
45 edges.push_back(std::make_pair(std::make_pair(vertices[i].first, vertices[up].first), EdgeProperty()));
48 if(i < (verticesCount - width)){
49 unsigned down = i + width;
50 edges.push_back(std::make_pair(std::make_pair(vertices[i].first, vertices[down].first), EdgeProperty()));
54 if((i % width) != (width - 1)){
56 edges.push_back(std::make_pair(std::make_pair(vertices[i].first, vertices[right].first), EdgeProperty()));
61 edges.push_back(std::make_pair(std::make_pair(vertices[i].first, vertices[left].first), EdgeProperty()));
67 return std::make_pair(vertices,edges);