Порядок создания сервисов и поиск циклов
Условие
При компиляции контейнера нужно понять, в каком порядке создавать сервисы. Каждая строка описывает сервис и его зависимости.
Обходите сервисы в порядке объявления, для каждого сначала (рекурсивно, в порядке перечисления) его зависимости, затем сам сервис; уже созданные пропускаются.
Вывод: порядок создания через пробел. Если зависимость не объявлена, выведите ERROR missing X for Y для первого такого случая (по порядку объявления сервисов и их зависимостей), проверяя это до обхода. Если при обходе найден цикл, выведите ERROR cycle A -> B -> A (путь от первого сервиса цикла до повторного входа в него).
Ввод: n (n ≤ 2000), затем строки имя зависимость....
Пример
4
mailer logger transport
logger
transport logger
app mailer
logger transport mailer app
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.