Дан набор пар городов:

Постройте неориентированный граф по парам городов, начните с вершины степени 1 и каждый раз идите к соседу, отличному от предыдущего. Обратный маршрут также корректен.

Короткий ответ

Что ответить на собеседовании

Постройте неориентированный граф по парам городов, начните с вершины степени 1 и каждый раз идите к соседу, отличному от предыдущего. Обратный маршрут также корректен.

Подробный разбор

Ответ с пояснениями

Условие

""" Дан набор пар городов:

  • между каждой парой городов сотрудник совершил прямой перелёт;
  • информация, в каком направлении был совершён перелёт, утеряна.
  • также утерян порядок перелетов.

Известно, что все указанные перелёты относятся к одному путешествию. Каждый следующий перелёт сотрудник начинал из того города, в котором закончил предыдущий. Никакой город не был посещён сотрудником дважды. Город начала путешествия также отличается от конечной точки. Выведите города в порядке следования по маршруту. Существует два возможных ответа, подойдёт любой.

Примеры: [("Москва", "Белград")] -> ["Москва", "Белград"] [("Москва", "Белград"), ("Москва", "Ереван")] -> ["Ереван", "Москва", "Белград"]

Flight = tuple[str, str]

def get_route(flights: list[Flight]) -> list[str]: ...

Ответ

Постройте неориентированный граф по парам городов, начните с вершины степени 1 и каждый раз идите к соседу, отличному от предыдущего. Обратный маршрут также корректен.

def get_route(flights):
    if not flights:
        return []
    graph = {}
    for a, b in flights:
        graph.setdefault(a, []).append(b)
        graph.setdefault(b, []).append(a)
    start = next(city for city, neighbors in graph.items() if len(neighbors) == 1)
    route = []
    previous, current = None, start
    while current is not None:
        route.append(current)
        following = next((city for city in graph[current] if city != previous), None)
        previous, current = current, following
    return route

Решение опирается на гарантии условия: один связный путь без повторных городов. Время и память O(n). Для недоверенного входа отдельно проверяют степени, связность, отсутствие циклов и повторных рёбер.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее