Нашли ошибку?

Приглашение друзьям друзей

ЛёгкаяНайти ошибку2 ошибкиГлава 6

#поиск в ширину#очередиid: ga-within-hops

Приглашение на вечеринку можно переслать не дальше чем через k знакомств. Функция within_hops(graph, start, k) должна вернуть множество всех, до кого приглашение дойдёт за не больше чем k шагов, не считая самого start. В функции две ошибки — найдите и исправьте их.

Пример

graph = {"я": ["Оля", "Пётр"], "Оля": ["Рома"], "Рома": ["Сеня"]}
within_hops(graph, "я", 2)   # {"Оля", "Пётр", "Рома"}

Решение

from collections import deque


def within_hops(graph: dict[str, list[str]], start: str, k: int) -> set[str]:
    """Все, до кого можно дойти не больше чем за k шагов (без start)."""
    dist = {start: 0}
    queue = deque([start])
    while queue:
        person = queue.pop()
        if dist[person] == k:
            continue  # дальше пересылать нельзя
        for friend in graph.get(person, []):
            if friend not in dist:
                dist[friend] = dist[person] + 1
                queue.append(friend)
    return {p for p, d in dist.items() if 0 < d < k}

Можно решать и в своём редакторе: «Скопировать с тестами» и запустите python3 within_hops.py — тесты те же, результат покажет ✓ / ✗ и итог.