17namespace layer1_foundations {
18namespace geometry_builder {
38 int f_v = (verbose_level >= 1);
42 cout <<
"geometric_backtrack_search::init" << endl;
47 for (i = 0; i <
gg->
GB->
V; i++) {
55 cout <<
"geometric_backtrack_search::done" << endl;
62 int f_v = (verbose_level >= 1);
65 cout <<
"geometric_backtrack_search::First" << endl;
97 int f_v = (verbose_level >= 1);
100 cout <<
"geometric_backtrack_search::Next" << endl;
132 int f_v = (verbose_level >= 1);
135 cout <<
"geometric_backtrack_search::BlockFirst I=" << I << endl;
169 int f_v = (verbose_level >= 1);
172 cout <<
"geometric_backtrack_search::BlockNext I=" << I << endl;
204#define GEO_LINE_SPLIT
208 int f_v = (verbose_level >= 1);
211 cout <<
"geometric_backtrack_search::RowFirstSplit "
212 "I=" << I <<
" m=" << m << endl;
238 int f_v = (verbose_level >= 1);
241 cout <<
"geometric_backtrack_search::RowNextSplit "
242 "I=" << I <<
" m=" << m << endl;
256 if (!
RowNext0(I, m, verbose_level)) {
261 return LineNext0(
gg, I, m, verbose_level);
267 int f_v = (verbose_level >= 1);
270 cout <<
"geometric_backtrack_search::geo_back_test "
274 int i0, i1, m, f_already_there, control_line;
278 control_line = i0 + C->
v - 1;
279 for (m = 0; m < C->
v - 1; m++) {
295 if (!f_already_there) {
309 int f_v = (verbose_level >= 1);
312 cout <<
"geometric_backtrack_search::RowFirst0 "
313 "I=" << I <<
" m=" << m << endl;
317 int f_already_there, i1, control_line;
321 if (!
RowFirst(I, m, verbose_level)) {
324 control_line = C->
i0 + C->
v - 1;
330 if (i1 == control_line) {
332 if (!
RowNext(I, m, verbose_level)) {
335 cout <<
"geometric_backtrack_search::RowFirst0 "
336 "back_to_line && f_new_situation == TRUE" << endl;
354 cout <<
"geometric_backtrack_search::RowFirst0 "
355 "I=" << I <<
" m=" << m
356 <<
" before isot_add" << endl;
357 gg->
print(cout, i1 + 1, i1 + 1);
368 cout <<
"geometric_backtrack_search::RowFirst0 "
369 "I=" << I <<
" m=" << m
370 <<
" after isot_add" << endl;
372 if (!f_already_there) {
375 if (!
RowNext(I, m, verbose_level)) {
387 int f_v = (verbose_level >= 1);
390 cout <<
"geometric_backtrack_search::RowNext0 "
391 "I=" << I <<
" m=" << m << endl;
395 int f_already_there, i1, control_line;
399 if (!
RowNext(I, m, verbose_level)) {
402 control_line = C->
i0 + C->
v - 1;
407 gg->
inc.nb_GEO[i1] = ((ISO_TYPE *)
408 gg->
inc.iso_type[control_line])->nb_GEO;
412 if (i1 == control_line) {
414 if (!
RowNext(I, m, verbose_level)) {
417 cout <<
"geometric_backtrack_search::RowNext0 "
418 "back_to_line && f_new_situation == TRUE" << endl;
439 if (!f_already_there) {
442 if (!
RowNext(I, m, verbose_level)) {
455 int f_v = (verbose_level >= 1);
464 cout <<
"geometric_backtrack_search::RowFirst "
465 "I=" << I <<
" m=" << m <<
" i1=" << i1 << endl;
488 int f_v = (verbose_level >= 1);
491 cout <<
"geometric_backtrack_search::RowNext "
492 "I=" << I <<
" m=" << m << endl;
522 int f_v = (verbose_level >= 1);
530 cout <<
"geometric_backtrack_search::RowFirstLexLeast "
531 "I=" << I <<
" m=" << m <<
" i1=" << i1 << endl;
540 cout <<
"geometric_backtrack_search::RowFirstLexLeast" << endl;
545 if (!
ConfFirst(I, m, J, verbose_level)) {
556 if (
ConfNext(I, m, J, verbose_level)) {
567 int f_v = (verbose_level >= 1);
575 cout <<
"geometric_backtrack_search::RowNextLexLeast "
576 "I=" << I <<
" m=" << m <<
" i1=" << i1 << endl;
582 if (
ConfNext(I, m, J, verbose_level)) {
594 cout <<
"geometric_backtrack_search::RowNextLexLeast" << endl;
600 if (!
ConfFirst(I, m, J, verbose_level)) {
611 int f_v = (verbose_level >= 1);
621 cout <<
"geometric_backtrack_search::RowFirstOrderly "
622 "I=" << I <<
" m=" << m <<
" i1=" << i1 << endl;
652 cout <<
"geometric_backtrack_search::RowFirstOrderly "
653 "I=" << I <<
" m=" << m <<
" i1=" << i1
677 int f_v = (verbose_level >= 1);
680 cout <<
"geometric_backtrack_search::place_row "
681 "I=" << I <<
" m=" << m <<
" idx=" << idx << endl;
690 cout <<
"geometric_backtrack_search::place_row "
691 "I=" << I <<
" m=" << m <<
" i1=" << i1 << endl;
709 for (n = 0; n < C->
r; n++, r++) {
714 cout <<
"geometric_backtrack_search::place_row "
715 "I=" << I <<
" m=" << m <<
" J=" << J
716 <<
" n=" << n <<
" j=" << j <<
" before TryToPlace" << endl;
719 if (!
TryToPlace(I, m, J, n, j, verbose_level)) {
720 cout <<
"geometric_backtrack_search::place_row !TryToPlace" << endl;
725 cout <<
"geometric_backtrack_search::place_row "
726 "I=" << I <<
" m=" << m <<
" J=" << J
727 <<
" n=" << n <<
" j=" << j <<
" after TryToPlace" << endl;
738 cout <<
"geometric_backtrack_search::place_row "
739 "I=" << I <<
" m=" << m <<
" idx=" << idx <<
" done" << endl;
745 int f_v = (verbose_level >= 1);
748 cout <<
"geometric_backtrack_search::RowNextOrderly "
749 "I=" << I <<
" m=" << m << endl;
759 cout <<
"geometric_backtrack_search::RowNextOrderly "
760 "I=" << I <<
" m=" << m <<
" i1=" << i1 << endl;
774 cout <<
"geometric_backtrack_search::RowNextOrderly "
775 "I=" << I <<
" m=" << m <<
" i1=" << i1 <<
" finished" << endl;
784 cout <<
"geometric_backtrack_search::RowNextOrderly "
785 "I=" << I <<
" m=" << m <<
" i1=" << i1
786 <<
" moved on to the next sibling" << endl;
801 for (J =
gg->
GB->
b_len - 1; J >= 0; J--) {
808 int f_v = (verbose_level >= 1);
811 cout <<
"geometric_backtrack_search::ConfFirst "
812 "I=" << I <<
" m=" << m
813 <<
" J=" << J << endl;
835 cout <<
"geometric_backtrack_search::ConfFirst "
836 "I=" << I <<
" m=" << m
837 <<
" J=" << J <<
" returns TRUE" << endl;
841 if (!
XFirst(I, m, J, n, verbose_level)) {
850 cout <<
"geometric_backtrack_search::ConfFirst "
851 "I=" << I <<
" m=" << m
852 <<
" J=" << J <<
" returns FALSE" << endl;
857 if (
XNext(I, m, J, n, verbose_level)) {
868 int f_v = (verbose_level >= 1);
871 cout <<
"geometric_backtrack_search::ConfNext "
872 "I=" << I <<
" m=" << m <<
" J=" << J << endl;
889 if (
XNext(I, m, J, n, verbose_level)) {
895 cout <<
"geometric_backtrack_search::ConfNext "
896 "I=" << I <<
" m=" << m
897 <<
" J=" << J <<
" returns FALSE" << endl;
906 cout <<
"geometric_backtrack_search::ConfNext "
907 "I=" << I <<
" m=" << m
908 <<
" J=" << J <<
" returns TRUE" << endl;
913 if (!
XFirst(I, m, J, n, verbose_level)) {
930 for (n = C->
r - 1; n >= 0; n--) {
937 int f_v = (verbose_level >= 1);
940 cout <<
"geometric_backtrack_search::XFirst "
941 "I=" << I <<
" m=" << m <<
" J=" << J
942 <<
" n=" << n << endl;
959 ret =
X_First(I, m, J, n, j, verbose_level);
962 cout <<
"geometric_backtrack_search::XFirst "
963 "I=" << I <<
" m=" << m <<
" J=" << J
964 <<
" n=" << n <<
" returns " << ret << endl;
972 int f_v = (verbose_level >= 1);
975 cout <<
"geometric_backtrack_search::XNext "
976 "I=" << I <<
" m=" << m
977 <<
" J=" << J <<
" n=" << n << endl;
981 int fuse_idx, i1, j0, r, j, k;
1010 if (J == 0 && n == 0) {
1019 for (j = old_x - j0 + 1; j < C->
b; j++) {
1021 if (
TryToPlace(I, m, J, n, j, verbose_level)) {
1028 cout <<
"geometric_backtrack_search::XNext "
1029 "I=" << I <<
" m=" << m <<
" J=" << J
1030 <<
" n=" << n <<
" j=" << j <<
" returns TRUE" << endl;
1038 cout <<
"geometric_backtrack_search::XNext "
1039 "I=" << I <<
" m=" << m <<
" J=" << J
1040 <<
" n=" << n <<
" returns FALSE" << endl;
1086 int f_v = (verbose_level >= 1);
1089 int fuse_idx, i1, j0, r;
1102 if (f_vbar[i1 * inc->Encoding->dim_n + r]) {
1103 cout <<
"I = " << I <<
" m = " << m <<
", J = " << J
1104 <<
", n = " << n <<
", i1 = " << i1
1105 <<
", r = " << r <<
", j0 = " << j0 << endl;
1106 cout <<
"X_Fst f_vbar[i1][r]" << endl;
1111 for (; j < C->
b; j++) {
1113 if (
TryToPlace(I, m, J, n, j, verbose_level)) {
1120 cout <<
"geometric_backtrack_search::X_First "
1121 "I=" << I <<
" m=" << m <<
" J=" << J
1122 <<
" n=" << n <<
" j=" << j <<
" returns TRUE" << endl;
1141 int f_v = (verbose_level >= 1);
1144 int fuse_idx, i1, j0, j1, r, k;
1160 cout <<
"geometric_backtrack_search::TryToPlace "
1161 "I=" << I <<
" m=" << m <<
" J=" << J
1162 <<
" n=" << n <<
" j=" << j
1163 <<
" skipped because of column sum" << endl;
1185 cout <<
"geometric_backtrack_search::TryToPlace "
1186 "I=" << I <<
" m=" << m <<
" J=" << J
1187 <<
" n=" << n <<
" j=" << j <<
1188 " skipped because of test" << endl;
gen_geo_conf * get_conf_IJ(int I, int J)
description of a configuration which is part of class decomposition_with_fuse
int f_last_non_zero_in_fuse
classification of geometries with a given row-tactical decomposition
decomposition_with_fuse * Decomposition_with_fuse
void decrement_pairs_point(int i1, int col, int k)
void girth_Floyd(int i, int verbose_level)
void girth_test_delete_incidence(int i, int j_idx, int j)
int apply_tests(int I, int m, int J, int n, int j, int verbose_level)
test_semicanonical * Test_semicanonical
void record_tree(int i1, int f_already_there)
void init(gen_geo *gg, int verbose_level)
int RowNextSplit(int I, int m, int verbose_level)
void place_row(int I, int m, int idx, int verbose_level)
int BlockFirst(int I, int verbose_level)
int BlockNext(int I, int verbose_level)
int RowNext(int I, int m, int verbose_level)
~geometric_backtrack_search()
int RowFirst0(int I, int m, int verbose_level)
int RowNextOrderly(int I, int m, int verbose_level)
int geo_back_test(int I, int verbose_level)
int * Row_stabilizer_orbit_idx
int TryToPlace(int I, int m, int J, int n, int j, int verbose_level)
int RowFirstSplit(int I, int m, int verbose_level)
void XClear(int I, int m, int J, int n)
int XNext(int I, int m, int J, int n, int verbose_level)
int First(int verbose_level)
int X_First(int I, int m, int J, int n, int j, int verbose_level)
int RowNext0(int I, int m, int verbose_level)
void ConfClear(int I, int m, int J)
int ConfFirst(int I, int m, int J, int verbose_level)
int RowFirstLexLeast(int I, int m, int verbose_level)
int XFirst(int I, int m, int J, int n, int verbose_level)
iso_type ** Row_stabilizer_orbits
int Next(int verbose_level)
int ConfNext(int I, int m, int J, int verbose_level)
geometric_backtrack_search()
void RowClear(int I, int m)
int RowNextLexLeast(int I, int m, int verbose_level)
int RowFirstOrderly(int I, int m, int verbose_level)
int RowFirst(int I, int m, int verbose_level)
geometry_builder_description * Descr
int & theX_ir(int i, int r)
iso_type ** iso_type_at_line
classification of geometries based on canonical forms
data_structures::classify_using_canonical_forms * Canonical_forms
void add_geometry(inc_encoding *Encoding, int f_partition_fixing_last, int &f_already_there, int verbose_level)
void init(gen_geo *gg, int v, int f_orderly, int verbose_level)
void col_marker_remove(int I, int m, int J, int n, int i1, int j0, int r, int old_x)
void row_init(int I, int m, int J, int i1, int verbose_level)
int row_starter(int I, int m, int J, int n, int i1, int j0, int r, int verbose_level)
int col_marker_test(int j0, int j, int i1)
void marker_move_on(int I, int m, int J, int n, int j, int i1, int j0, int r, int verbose_level)
void markers_update(int I, int m, int J, int n, int j, int i1, int j0, int r, int verbose_level)
void row_test_continue(int I, int m, int J, int i1)
#define Int_vec_zero(A, B)
the orbiter library for the classification of combinatorial objects