34 struct Default_Operation_On_Node
36 void operator () (GT &,
typename GT::Node *,
const size_t &,
const size_t &) { }
40 struct Default_Operation_On_Arc
42 void operator () (GT &,
typename GT::Arc *,
const size_t &,
const size_t &) { }
51 class Operation_On_Node = Default_Operation_On_Node<GT>,
52 class Operation_On_Arc = Default_Operation_On_Arc<GT>
57 void operator () (GT & g,
const size_t & width,
const size_t & height)
59 if (g.get_num_nodes() != 0)
60 throw std::domain_error(
"There is nodes in graph");
62 if (width < 2 or height < 2)
63 throw std::length_error(
"The minimun size must be 2 x 2");
65 typename GT::Node ***
map =
new typename GT::Node **[height];
66 for (
size_t i = 0; i < height; ++i)
70 map[i] =
new typename GT::Node *[width];
71 for (
size_t j = 0; j < width; ++j)
73 typename GT::Node * n = g.insert_node(
typename GT::Node_Type());
74 Operation_On_Node()(g, n, i, j);
78 typename GT::Arc * a = g.insert_arc(n, map[i][j - 1]);
79 Operation_On_Arc()(g, a, i, j);
83 typename GT::Arc * a = g.insert_arc(n, map[i - 1][j]);
84 Operation_On_Arc()(g, a, i, j);
88 typename GT::Arc * a = g.insert_arc(n, map[i - 1][j - 1]);
89 Operation_On_Arc()(g, a, i, j);
91 if (j + 1 < width and i > 0)
93 typename GT::Arc * a = g.insert_arc(n, map[i - 1][j + 1]);
94 Operation_On_Arc()(g, a, i, j);
100 for (
size_t k = i - 1; k >= 0; --k)
108 for (
size_t i = 0; i < height; ++i)
void clear_graph(GT &g) noexcept
Definition: tpl_graph.H:3463