Разбор задачи: Город назначения

Предложенный нами код решения:

 def destCity(paths):
    """
    Возвращает город назначения, у которого нет исходящих путей.
    :param paths: список путей, где каждый путь представлен списком [cityAi, cityBi]
    :return: город назначения
    """
    # Создаем множество городов, из которых выходят пути
    outgoing_cities = {city[0] for city in paths}
    # Проходим по списку путей и находим город, который отсутствует в множестве исходящих городов
    for path in paths:
        if path[1] not in outgoing_cities:
            return path[1]

Функция destCity решает задачу поиска города назначения в списке путей. Город назначения определяется как тот, у которого нет исходящих путей. Давайте разберем решение пошагово:


1. Создание множества городов с исходящими путями

outgoing_cities = {city[0] for city in paths}
  • На этом этапе создается множество outgoing_cities, которое содержит все города, из которых выходят пути.
  • Для этого используется генератор множества, который проходит по каждому пути в paths и добавляет в множество первый элемент каждого пути (city[0]), представляющий город, из которого идет путь.

Пример:
Для входных данных paths = [["London", "New York"], ["New York", "Lima"], ["Lima", "Sao Paulo"]] множество будет выглядеть так:
outgoing_cities = {"London", "New York", "Lima"}.


2. Поиск города назначения

for path in paths:
    if path[1] not in outgoing_cities:
        return path[1]
  • После создания множества исходящих городов функция начинает проходить по каждому пути в списке paths.
  • Второй элемент каждого пути (path[1]) — это город, в который ведет путь. Если этот город отсутствует в множестве outgoing_cities, то он является городом назначения.
  • Как только такой город найден, он возвращается из функции.

Пример:
Для входных данных paths = [["London", "New York"], ["New York", "Lima"], ["Lima", "Sao Paulo"]]:

  1. Проверяется path[1] = "New York" — он есть в outgoing_cities.
  2. Проверяется path[1] = "Lima" — он тоже есть в outgoing_cities.
  3. Проверяется path[1] = "Sao Paulo" — его нет в outgoing_cities. Это город назначения, функция возвращает "Sao Paulo".

3. Почему алгоритм работает корректно

  • Задача гарантирует, что граф представляет собой цепочку, не содержащую циклов. Это означает, что всегда будет ровно один город назначения.
  • Мы эффективно находим город назначения, проверяя только наличие каждого конечного города в множестве исходящих городов.

Пример работы функции

Для входных данных paths = [["B", "C"], ["D", "B"], ["C", "A"]]:

  1. Множество исходящих городов: {"B", "D", "C"}.
  2. Проверка конечных городов:
    • "C" — есть в множестве исходящих городов.
    • "B" — есть в множестве исходящих городов.
    • "A" — отсутствует в множестве исходящих городов. Это город назначения.

Функция возвращает "A".

 



Вы должны Войти или Зарегистрироваться чтобы оставлять комментарии