Программа курса:
Разбор задачи: Город назначения
Предложенный нами код решения:
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"]]:
- Проверяется
path[1] = "New York"— он есть вoutgoing_cities. - Проверяется
path[1] = "Lima"— он тоже есть вoutgoing_cities. - Проверяется
path[1] = "Sao Paulo"— его нет вoutgoing_cities. Это город назначения, функция возвращает"Sao Paulo".
3. Почему алгоритм работает корректно
- Задача гарантирует, что граф представляет собой цепочку, не содержащую циклов. Это означает, что всегда будет ровно один город назначения.
- Мы эффективно находим город назначения, проверяя только наличие каждого конечного города в множестве исходящих городов.
Пример работы функции
Для входных данных paths = [["B", "C"], ["D", "B"], ["C", "A"]]:
- Множество исходящих городов:
{"B", "D", "C"}. - Проверка конечных городов:
"C"— есть в множестве исходящих городов."B"— есть в множестве исходящих городов."A"— отсутствует в множестве исходящих городов. Это город назначения.
Функция возвращает "A".
Вы должны Войти или Зарегистрироваться чтобы оставлять комментарии