Beispiel #1
0
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;
	}
}
Beispiel #2
0
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;
}