У меня есть программа, которая соединяет 2 человек. Соединение сохраняется в мультикарте как пара ключ-значение. Например, add john tim
добавляет Тима как соединение с Джоном, Тим может добавить больше людей, а его связи могут добавить больше людей.
Мне нужно найти глубину подсети человека, то есть самую длинную цепочку найма, начинающуюся с этого человека. Например, учитывая, что следующий набор данных
> add john mary
> add john tom
> add mary brad
> add tom Maria
> add mary Eli
> add brad Sofia
Depth John
должен возвращать 4, поскольку самая длинная цепочка John
имеет значение 4.
John -> Mary -> Brad -> sofia
(4)
John -> tom -> Maria
(3)
и Depth sofia
вернут 1, поскольку она сама по себе и не распространяется ни на кого.
Вот что я пытался.
- для каждого ключа, найдите, сколько существует на карте (используя equal_range)
- , затем выполните итерацию по этому и для каждого из них, посчитайте их глубину
- saveглубину как максимальную и сравнивайте ее после каждой итерации и возвращайте максимальную
Вот код.
void count_depth_recursive(std::multimap<std::string, std::string>networkMap, std::string id, int depth)
{
for(auto itr = networkMap.begin(); itr != networkMap.end(); ++itr)
{
if(itr->first == id)
{
++depth;
count_recursive(networkMap, itr->second, depth);
}
}
}
Функция драйвера.
int count_depth(std::multimap<std::string, std::string>networkMap, std::string id)
{
int depth = 0;
int max = 0;
auto find = networkMap.equal_range(id);
for(auto itr = find.first; itr != find.second; ++itr)
count_depth_recursive(networkMap, itr->first, depth);
std::cout << depth << std::endl;
return depth;
}
Я продолжаю получать ноль в качестве ответа, и я начинаю сомневаться в правильности моего подхода к этому.