18namespace layer1_foundations {
19namespace graph_theory {
52 std::string &fname_base,
int verbose_level)
54 int f_v = (verbose_level >= 1);
58 cout <<
"layered_graph::init" << endl;
67 cout <<
"layered_graph::init before L[i].init, i=" << i << endl;
74 cout <<
"layered_graph::init done" << endl;
93 cout <<
"layered_graph::print_nb_nodes_per_level" << endl;
94 cout <<
"level & number of nodes " << endl;
96 cout << i <<
" & " <<
L[i].
nb_nodes <<
"\\\\" << endl;
112 cout <<
"layered_graph::average_word_length N == 0" << endl;
115 avg = s / (double) N;
128 L[i].
place(verbose_level);
156 int *Nb_groups,
double x_stretch,
int verbose_level)
158 int f_v = (verbose_level >= 1);
163 cout <<
"layered_graph::place_with_grouping "
164 "x_stretch= " << x_stretch << endl;
170 cout <<
"layered_graph::place_with_grouping "
171 "layer " << i << endl;
175 x_stretch, verbose_level);
177 cout <<
"layered_graph::place_with_grouping "
178 "layer " << i <<
" done" << endl;
182 cout <<
"layered_graph::place_with_grouping done" << endl;
189 int f_v = (verbose_level >= 1);
193 cout <<
"layered_graph::add_edge l1=" << l1
194 <<
" n1=" << n1 <<
" l2="
195 << l2 <<
" n2=" << n2 << endl;
198 cout <<
"layered_graph::add_edge "
199 "n1 is negative, n1=" << n1 << endl;
202 cout <<
"layered_graph::add_edge "
203 "n2 is negative, n2=" << n2 << endl;
206 cout <<
"layered_graph::add_edge "
207 "n1 >= L[l1].nb_nodes" << endl;
208 cout <<
"l1 = " << l1 << endl;
209 cout <<
"n1 = " << n1 << endl;
210 cout <<
"L[l1].nb_nodes = " <<
L[l1].
nb_nodes << endl;
215 cout <<
"layered_graph::add_edge n2 >= L[l2].nb_nodes" << endl;
216 cout <<
"l2 = " << l2 << endl;
217 cout <<
"n2 = " << n2 << endl;
218 cout <<
"L[l2].nb_nodes = " <<
L[l2].
nb_nodes << endl;
225 cout <<
"layered_graph::add_edge done" << endl;
230 const char *text,
int verbose_level)
232 int f_v = (verbose_level >= 1);
235 cout <<
"layered_graph::add_text l=" << l
236 <<
" n=" << n << endl;
243 int f_v = (verbose_level >= 1);
246 cout <<
"layered_graph::add_data1" << endl;
253 long int *v,
int len,
int verbose_level)
255 int f_v = (verbose_level >= 1);
258 cout <<
"layered_graph::add_node_vec_data "
259 "l=" << l <<
" n=" << n << endl;
265 int l,
int n,
int index,
int verbose_level)
267 int f_v = (verbose_level >= 1);
270 cout <<
"layered_graph::set_distinguished_element_index "
271 "l=" << l <<
" n=" << n << endl;
279 int f_v = (verbose_level >= 1);
282 cout <<
"layered_graph::add_node_data1 "
283 "l=" << l <<
" n=" << n << endl;
290 int f_v = (verbose_level >= 1);
293 cout <<
"layered_graph::add_node_data2 "
294 "l=" << l <<
" n=" << n << endl;
301 int f_v = (verbose_level >= 1);
304 cout <<
"layered_graph::add_node_data3 "
305 "l=" << l <<
" n=" << n << endl;
315 int f_v = (verbose_level >= 1);
319 int factor_1000 = 1000;
321 double move_out = 0.01;
325 fname_full.assign(fname);
326 fname_full.append(
".mp");
329 cout <<
"layered_graph::draw_with_options fname_full = " << fname_full << endl;
332 cout <<
"layered_graph::draw_with_options O == NULL" << endl;
340 cout <<
"layered_graph::draw_with_options xin = " << O->
xin << endl;
341 cout <<
"layered_graph::draw_with_options yin = " << O->
yin << endl;
342 cout <<
"layered_graph::draw_with_options xout = " << O->
xout << endl;
343 cout <<
"layered_graph::draw_with_options yout = " << O->
yout << endl;
344 cout <<
"layered_graph::draw_with_options f_embedded = " << O->
f_embedded << endl;
349 G.
init(fname_full, O, verbose_level - 1);
352 mp_graphics G(fname_full, x_min, y_min,
361 G.tikz_global_scale = O->
scale;
368 int i, j, h, id, n, l;
370 int rad_x_twice, rad_y_twice;
373 int threshold = 50000;
375 int xoffset = 3 * O->
rad / 2;
381 rad_x_twice = O->
rad >> 3;
382 rad_y_twice = O->
rad >> 3;
391 cout <<
"layered_graph::draw" << endl;
417 cout <<
"layered_graph::draw drawing edges in "
418 "layer " << i <<
" with " <<
L[i].
nb_nodes
419 <<
" nodes:" << endl;
424 cout <<
"layered_graph::draw drawing edges in "
425 "layer " << i <<
" node " << j
430 cout <<
"Vertex " << i <<
" " << j <<
" at ("
438 cout <<
"skipping node " << j <<
" in layer " << i << endl;
454 up =
NEW_int(
L[i].Nodes[j].nb_neighbors);
455 down =
NEW_int(
L[i].Nodes[j].nb_neighbors);
462 cout <<
"layered_graph::draw drawing edges in "
463 "layer " << i <<
" node " << j <<
" neighbor = "
465 <<
" own_id=" << own_id <<
" id=" <<
id << endl;
472 cout <<
"is in layer " << l <<
" mode " << n << endl;
485 cout <<
"added an up link" << endl;
489 down[nb_down++] = id;
491 cout <<
"added a down link" << endl;
498 cout <<
"layered_graph::draw drawing edges, node "
499 << j <<
", nb_up = " << nb_up << endl;
501 if (nb_up > threshold) {
503 cout <<
"layered_graph::draw drawing "
504 "edges nb_up > threshold" << endl;
506 for (h = 0; h < nb_up; h++) {
511 if (h > 0 && h < nb_up - 1) {
514 Px[1] = (int)(x + ((
double)(x2 - x)) /
517 Py[1] = (int)(y + ((
double)(y2 - y)) /
530 Px[2] = (Px[0] + Px[1]) >> 1;
531 Py[2] = (Py[0] + Py[1]) >> 1;
532 snprintf(text, 1000,
"%d", edge_label);
534 xoffset, yoffset,
"", text);
540 for (h = 0; h < nb_up; h++) {
551 Px[2] = (Px[0] + Px[1]) >> 1;
552 Py[2] = (Py[0] + Py[1]) >> 1;
553 snprintf(text, 1000,
"%d", edge_label);
555 xoffset, yoffset,
"", text);
560 cout <<
"edge " << i <<
" " << j
561 <<
" to " << l <<
" " << n << endl;
568 cout <<
"layered_graph::draw drawing edges, node "
569 << j <<
", nb_down = " << nb_down << endl;
571 if (nb_down > threshold) {
573 cout <<
"layered_graph::draw drawing edges "
574 "nb_down > threshold" << endl;
576 for (h = 0; h < nb_down; h++) {
580 if (h > 0 && h < nb_down - 1) {
583 Px[1] = x + ((double)(x2 - x)) /
586 Py[1] = y + ((double)(y2 - y)) /
598 Px[2] = (Px[0] + Px[1]) >> 1;
599 Py[2] = (Py[0] + Py[1]) >> 1;
600 snprintf(text, 1000,
"%d", edge_label);
602 xoffset, yoffset,
"", text);
607 cout <<
"edge " << i <<
" " << j
608 <<
" to " << l <<
" " << n << endl;
614 for (h = 0; h < nb_down; h++) {
625 Px[2] = (Px[0] + Px[1]) >> 1;
626 Py[2] = (Py[0] + Py[1]) >> 1;
627 snprintf(text, 1000,
"%d", edge_label);
629 xoffset, yoffset,
"", text);
634 cout <<
"edge " << i <<
" " << j
635 <<
" to " << l <<
" " << n << endl;
657 cout <<
"edge " << i <<
" " << j
658 <<
" to " << l <<
" " << n << endl;
681 cout <<
"layered_graph::draw drawing nodes in layer "
682 << i <<
" with " <<
L[i].
nb_nodes <<
" nodes:" << endl;
698 cout <<
"Vertex " << i <<
" " << j <<
" at ("
714 if (
L[i].Nodes[j].label) {
716 cout <<
"Vertex " << i <<
" " << j
717 <<
" has the following label: "
720 strcpy(label,
L[i].Nodes[j].label);
724 cout <<
"Vertex " << i <<
" " << j
725 <<
" does not have a label" << endl;
733 cout <<
"Vertex " << i <<
" " << j
734 <<
" has the following data1 value: "
739 if (
L[i].Nodes[j].radius_factor >= 1.) {
740 snprintf(label, 1000,
"{\\scriptsize %d}",
L[i].Nodes[j].
data1);
754 cout <<
"Vertex " << i <<
" " << j
755 <<
" f_nodes_empty is TRUE" << endl;
768 cout <<
"layer " << i <<
" node " << j
769 <<
" label=" << label << endl;
772 if (strlen(label) ) {
794 Py[0] = y + 4 * O->
rad;
824 snprintf(str, 1000,
"%d", i);
840 cout <<
"layered_graph::draw written file " << fname_full
841 <<
" of size " << Fio.
file_size(fname_full) << endl;
847 int x_max,
int y_max,
int f_rotated,
int &x,
int &y)
859 x = (int)(x1 * x_max);
860 y = (int)(y1 * y_max);
864 int x_max,
int y_max,
int f_rotated,
int &x,
int &y)
871 L[l].y_coordinate, x_max, y_max, f_rotated, x, y);
873 x = (int)(
L[l].Nodes[n].x_coordinate * x_max);
874 y = (int)(
L[l].y_coordinate * y_max);
884 if (
id >= id0 &&
id < id0 +
L[i].
nb_nodes) {
891 cout <<
"layered_graph::find_node_by_id "
892 "did not find node with id " <<
id << endl;
900 int f_v = (verbose_level >= 1);
904 cout <<
"layered_graph::write_file" << endl;
906 M.
alloc(1024 , verbose_level - 1);
910 M.
write_file(fname.c_str(), verbose_level - 1);
912 cout <<
"layered_graph::write_file done" << endl;
919 int f_v = (verbose_level >= 1);
924 cout <<
"layered_graph::read_file "
925 "reading file " << fname <<
" of size "
928 M.
read_file(fname.c_str(), verbose_level - 1);
930 cout <<
"layered_graph::read_file "
931 "read file " << fname << endl;
936 cout <<
"layered_graph::read_file done" << endl;
943 int f_v = (verbose_level >= 1);
944 int f_vv = (verbose_level >= 2);
948 cout <<
"layered_graph::write_memory_object" << endl;
952 cout <<
"after m->write_int(1), "
957 cout <<
"after m->write_int(nb_layers), "
973 cout <<
"layered_graph::write_memory_object "
974 "finished, data size (in chars) = "
982 int f_v = (verbose_level >= 1);
988 cout <<
"layered_graph::read_memory_object" << endl;
995 cout <<
"layered_graph::read_memory_object "
996 "unknown version: version = " << version << endl;
1020 cout <<
"layered_graph::read_memory_object "
1021 "unknown the file seems to be corrupt" << endl;
1025 cout <<
"layered_graph::read_memory_object "
1031 std::vector<std::vector<int> > &All_Paths,
1034 int f_v = (verbose_level >= 1);
1037 cout <<
"layered_graph::remove_edges" << endl;
1038 cout <<
"layer1 = " << layer1 <<
" node1=" << node1 <<
" layer2=" << layer2 <<
" node2=" << node2 << endl;
1040 int l, n, j, id, l1, n1;
1045 for (l = layer1; l < layer2; l++) {
1055 for (h = 0; h < All_Paths.size(); h++) {
1056 if (All_Paths[h][d] == n1 && All_Paths[h][d + 1] == n) {
1070 cout <<
"layered_graph::remove_edges done" << endl;
1077 int f_v = (verbose_level >= 1);
1080 cout <<
"layered_graph::remove_edge" << endl;
1082 if (!
L[layer1].Nodes[node1].remove_neighbor(
this,
L[layer2].Nodes[node2].
id, verbose_level - 2)) {
1083 cout <<
"layered_graph::remove_edge could not remove neighbor (1)" << endl;
1084 cout <<
"layer1 = " << layer1 <<
" node1=" << node1 <<
" layer2=" << layer2 <<
" node2=" << node2 << endl;
1087 if (!
L[layer2].Nodes[node2].remove_neighbor(
this,
L[layer1].Nodes[node1].
id, verbose_level - 2)) {
1088 cout <<
"layered_graph::remove_edge could not remove neighbor (2)" << endl;
1089 cout <<
"layer1 = " << layer1 <<
" node1=" << node1 <<
" layer2=" << layer2 <<
" node2=" << node2 << endl;
1093 cout <<
"layered_graph::remove_edge done" << endl;
1098 std::vector<std::vector<int> > &All_Paths,
1101 int f_v = (verbose_level >= 1);
1104 cout <<
"layered_graph::find_all_paths_between" << endl;
1105 cout <<
"layer1 = " << layer1 <<
" node1=" << node1 <<
" layer2=" << layer2 <<
" node2=" << node2 << endl;
1110 Path.resize(layer2 - layer1 + 1);
1118 cout <<
"We found the following " << All_Paths.size()
1119 <<
" paths between node " << node2 <<
" at layer " << layer2
1120 <<
" and node " << node1 <<
" at layer " << layer1 <<
":" << endl;
1124 for (i = 0; i < All_Paths.size(); i++) {
1125 cout <<
"path " << i <<
" is: ";
1129 cout <<
"\\\\" << endl;
1133 cout <<
"layered_graph::find_all_paths_between done" << endl;
1138 int layer1,
int node1,
1139 int layer2,
int node2,
1141 std::vector<std::vector<int> > &All_Paths,
1142 std::vector<int> &Path,
1145 int f_v = (verbose_level >= 1);
1149 cout <<
"layered_graph::find_all_paths_between_recursion" << endl;
1150 cout <<
"layer1 = " << layer1 <<
" node1=" << node1 <<
" layer2=" << layer2 <<
" node2=" << node2 <<
" l0=" << l0 <<
" n0=" << n0 << endl;
1155 Path[layer2 - l0] = n0;
1157 std::vector<int> All_Parents;
1162 cout <<
"layered_graph::find_all_paths_between_recursion All_Parents=";
1167 for (i = 0; i < All_Parents.size(); i++) {
1168 id = All_Parents[i];
1170 if (l1 == layer1 && n1 == node1) {
1171 Path[layer2 - l1] = n1;
1172 All_Paths.push_back(Path);
1186 cout <<
"layered_graph::find_all_paths_between_recursion done" << endl;
1191 int f_place_x,
int verbose_level)
1193 int f_v = (verbose_level >= 1);
1194 int l, n, id, id1, l1, n1;
1197 cout <<
"layered_graph::create_spanning_tree" << endl;
1232 cout <<
"layered_graph::create_spanning_tree done" << endl;
1239 int f_v = (verbose_level >= 1);
1243 cout <<
"layered_graph::compute_depth_first_ranks" << endl;
1250 cout <<
"layered_graph::compute_depth_first_ranks done" << endl;
1257 int lvl,
double radius_factor,
int verbose_level)
1259 int f_v = (verbose_level >= 1);
1263 cout <<
"layered_graph::set_radius_factor_for_all_"
1264 "nodes_at_level level = " << lvl
1265 <<
" radius_factor=" << radius_factor << endl;
1274 int f_depth_first,
int f_breadth_first,
int verbose_level)
1276 int f_v = (verbose_level >= 1);
1277 int f_vv = (verbose_level >= 2);
1280 int i, k, r, a, b, r0;
1287 cout <<
"layered_graph::make_subset_lattice n=" << n << endl;
1291 for (i = 0; i <= n; i++) {
1303 init(depth + 1 , Nb, dummy, verbose_level);
1305 cout <<
"layered_graph::make_subset_lattice after init" << endl;
1307 place(verbose_level);
1309 cout <<
"layered_graph::make_subset_lattice after place" << endl;
1313 for (k = 0; k <= depth; k++) {
1314 for (r = 0; r < Nb[k]; r++) {
1320 if (f_depth_first) {
1321 cout <<
"k=" << k <<
" r=" << r <<
" set=";
1325 for (i = k - 1; i >= 0; i--) {
1332 cout <<
"i=" << i <<
" set1[i]=" << set1[i] << endl;
1333 for (j = j0 + 1; j < set1[i]; j++) {
1334 cout <<
"i = " << i <<
" j=" << j <<
" adding "
1340 snprintf(text, 1000,
"%d", a);
1342 else if (f_breadth_first) {
1344 for (i = 0; i < k; i++) {
1348 snprintf(text, 1000,
"%d", a);
1352 snprintf(text, 1000,
"%d", set1[k - 1]);
1363 for (k = 1; k <= depth; k++) {
1364 for (r = 0; r < Nb[k]; r++) {
1368 for (a = k - 1; a >= k - 1; a--) {
1370 for (b = a; b < k - 1; b++) {
1371 set2[b] = set2[b + 1];
1378 for (a = k - 1; a >= 0; a--) {
1380 for (b = a; b < k - 1; b++) {
1381 set2[b] = set2[b + 1];
1394 cout <<
"layered_graph::make_subset_lattice done" << endl;
1400 int f_grouping,
double x_stretch,
int verbose_level)
1402 int f_v = (verbose_level >= 1);
1407 int i, l1, n1, l2, n2, nb_v = 0, c = 0, a;
1410 cout <<
"layered_graph::init_poset_from_file" << endl;
1416 Nb_orbits =
NEW_int(nb_layer);
1419 for (i = 0; i < nb_layer; i++) {
1428 init(nb_layer, Nb, dummy, 0);
1432 for (l1 = 0; l1 < nb_layer; l1++) {
1433 for (n1 = 0; n1 < Nb[l1]; n1++) {
1438 snprintf(text, 1000,
"%d", a);
1443 for (l1 = 0; l1 < nb_layer; l1++) {
1444 fp >> Nb_orbits[l1];
1445 Orbit_length[l1] =
NEW_int(Nb_orbits[l1]);
1446 for (i = 0; i < Nb_orbits[l1]; i++) {
1447 fp >> Orbit_length[l1][i];
1465 Nb_orbits, x_stretch, 0 );
1468 cout <<
"created a graph with " << nb_v
1469 <<
" vertices and " << c <<
" edges" << endl;
1473 cout <<
"layered_graph::init_poset_from_file done" << endl;
14811 2 2 2 2 2 2 3 3 3 3 2 2 2 4 4 4 6 6 6 6 4 4 4 4 8 8 8 12 24
a collection of combinatorial functions
void unrank_k_subset(int rk, int *set, int n, int k)
int rank_k_subset(int *set, int n, int k)
long int int_n_choose_k(int n, int k)
void print(std::ostream &ost, std::vector< int > &v)
a collection of functions related to sorted vectors
int int_vec_search_linear(int *v, int len, int a, int &idx)
part of the data structure layered_graph
void write_memory_object(orbiter_kernel_system::memory_object *m, int verbose_level)
void place(int verbose_level)
void init(int nb_nodes, int id_of_first_node, int verbose_level)
void scale_x_coordinates(double x_stretch, int verbose_level)
void place_with_grouping(int *group_size, int nb_groups, double x_stretch, int verbose_level)
void read_memory_object(orbiter_kernel_system::memory_object *m, int verbose_level)
part of the data structure layered_graph
void place_x_based_on_tree(layered_graph *G, double left, double right, int verbose_level)
void depth_first_rank_recursion(layered_graph *G, int &r, int verbose_level)
void add_neighbor(int l, int n, int id)
void find_all_parents(layered_graph *G, std::vector< int > &All_Parents, int verbose_level)
void set_distinguished_element(int idx)
void add_vec_data(long int *v, int len)
void allocate_tree_structure(int verbose_level)
void add_text(const char *text)
void register_child(layered_graph *G, int id_child, int verbose_level)
int find_parent(layered_graph *G, int verbose_level)
void add_node_data2(int l, int n, int data, int verbose_level)
void draw_with_options(std::string &fname, graphics::layered_graph_draw_options *O, int verbose_level)
void init_poset_from_file(std::string &fname, int f_grouping, double x_stretch, int verbose_level)
void find_all_paths_between(int layer1, int node1, int layer2, int node2, std::vector< std::vector< int > > &All_Paths, int verbose_level)
void make_subset_lattice(int n, int depth, int f_tree, int f_depth_first, int f_breadth_first, int verbose_level)
void remove_edges(int layer1, int node1, int layer2, int node2, std::vector< std::vector< int > > &All_Paths, int verbose_level)
void read_memory_object(orbiter_kernel_system::memory_object *m, int verbose_level)
void add_data1(int data, int verbose_level)
void place_with_grouping(int **Group_sizes, int *Nb_groups, double x_stretch, int verbose_level)
void print_nb_nodes_per_level()
void add_node_data3(int l, int n, int data, int verbose_level)
void set_radius_factor_for_all_nodes_at_level(int lvl, double radius_factor, int verbose_level)
void write_memory_object(orbiter_kernel_system::memory_object *m, int verbose_level)
void scale_x_coordinates(double x_stretch, int verbose_level)
void add_text(int l, int n, const char *text, int verbose_level)
void write_file(std::string &fname, int verbose_level)
void coordinates_direct(double x_in, double y_in, int x_max, int y_max, int f_rotated, int &x, int &y)
void add_node_data1(int l, int n, int data, int verbose_level)
void find_all_paths_between_recursion(int layer1, int node1, int layer2, int node2, int l0, int n0, std::vector< std::vector< int > > &All_Paths, std::vector< int > &Path, int verbose_level)
void find_node_by_id(int id, int &l, int &n)
void place(int verbose_level)
void init(int nb_layers, int *Nb_nodes_layer, std::string &fname_base, int verbose_level)
void add_node_vec_data(int l, int n, long int *v, int len, int verbose_level)
void create_spanning_tree(int f_place_x, int verbose_level)
double average_word_length()
void coordinates(int id, int x_max, int y_max, int f_rotated, int &x, int &y)
void place_with_y_stretch(double y_stretch, int verbose_level)
void read_file(std::string &fname, int verbose_level)
void add_edge(int l1, int n1, int l2, int n2, int verbose_level)
void remove_edge(int layer1, int node1, int layer2, int node2, int verbose_level)
void set_distinguished_element_index(int l, int n, int index, int verbose_level)
void compute_depth_first_ranks(int verbose_level)
options for drawing an object of type layered_graph
void(* draw_ending_callback)(graph_theory::layered_graph *LG, mp_graphics *G, int x_max, int y_max, int f_rotated, int dx, int dy)
void(* draw_begining_callback)(graph_theory::layered_graph *LG, mp_graphics *G, int x_max, int y_max, int f_rotated, int dx, int dy)
int f_has_draw_begining_callback
void(* draw_vertex_callback)(graph_theory::layered_graph *LG, mp_graphics *G, int layer, int node, int x, int y, int dx, int dy)
int f_has_draw_ending_callback
int f_has_draw_vertex_callback
a general 2D graphical output interface (metapost, tikz, postscript)
void aligned_text(int x, int y, const char *alignment, const char *p)
void polygon2(int *Px, int *Py, int i1, int i2)
void frame(double move_out)
void init(std::string &file_name, layered_graph_draw_options *Draw_options, int verbose_level)
void nice_circle(int x, int y, int rad)
void user2dev_dist_y(int &y)
void aligned_text_with_offset(int x, int y, int xoffset, int yoffset, const char *alignment, const char *p)
void user2dev_dist_x(int &x)
void begin_figure(int factor_1000)
basic number theoretic functions
int i_power_j(int i, int j)
numerical functions, mostly concerned with double
double norm_of_vector_2D(int x1, int x2, int y1, int y2)
a collection of functions related to file io
long int file_size(std::string &fname)
for serialization of complex data types
void alloc(long int length, int verbose_level)
void write_file(const char *fname, int verbose_level)
void write_string(const char *p)
void read_string(char *&p)
void read_file(const char *fname, int verbose_level)
data_structures::int_vec * Int_vec
#define NEW_OBJECTS(type, n)
#define Int_vec_copy(A, B, C)
#define Int_vec_print(A, B, C)
orbiter_kernel_system::orbiter_session * Orbiter
global Orbiter session
the orbiter library for the classification of combinatorial objects