Link* Link::generate() { Link* n = new Link(); n->value = randint(1, 10); n->level = 1; Link* p = this; if (p->find_total(n) != 0) // Если есть элемент на уровне ниже, то уже добавляем новый элемент слоем выше него. { p = p->find_lower(n); n->level++; if (p->find_total(n) != 0) // Есть уже элемент n->level 2 { p = p->find_lower(n); // p это копия элемента n->level 2 n->level++; // Если есть - добавляем n на третий элемент, n->level стал 3 } if (make_decision(100 / (n->level - 0.6))) // При решении добавить элемент. { cout << "Decision true on p value: " << n->value << ", level: " << n->level << " #" << cnt << '\n'; p = p->add(n); cnt++; } else { cout << "Decision false on p value: " << n->value << " level: " << n->level << '\n'; return this; } p = p->set_neighbours(); return p; } if (p->find_total(n) != 0) { if (p->level + 1 < system_levels) return this; } }
Link* Link::generate() { Link* n = new Link(); n->value = randint(1, 10); n->level = 1; Link* p = this; while (p->find_total(n)) // Если есть элемент на уровне ниже, то уже добавляем новый элемент слоем выше него. { p = p->find_total(n); n->level++; if (n->level == system_levels && n->level == 1 || n->level > system_levels) { n->level--; // n->level - 1, потому-что счётчик накручивает 5й элемент автоматом cout << "Element already exists;" << setw(4) << " value: " << n->value << ", level: " << n->level << " string: " << str_cnt << '\n'; return this; } } if (make_decision(100 / (n->level - 0.6))) // При решении добавить элемент. { cout << "Decision true on p " << setw(12) << "value: " << n->value << ", level: " << n->level << " #" << cnt << " string: " << str_cnt << '\n'; p = p->add(n); cnt++; str_cnt++; } else { cout << "Decision false on p " << setw(11) << "value: " << n->value << ", level: " << n->level << " string: " << str_cnt << '\n'; str_cnt++; return this; } p = p->set_neighbours(); return p; }