Вступить в клуб →
сложнаяpythonГрафы и обходы

has_cycle: есть ли ориентированный цикл в графе зависимостей

Напишите функцию has_cycle(n: int, edges: list[tuple[int, int]]) -> bool.

Вход. n — число вершин с номерами от 0 до n - 1. edges — список ориентированных рёбер: пара (u, v) означает ребро из u в v.

Выход. Ровно True или False (тип bool): содержит ли граф хотя бы один ориентированный цикл.

Поведение на краевых входах.

  • n = 0 и пустой список рёбер — вернуть False.
  • Петля (u, u) — это цикл длины 1, вернуть True.
  • Пара рёбер (u, v) и (v, u) — цикл длины 2, вернуть True.
  • Два одинаковых ребра (u, v) и (u, v) циклом не являются: направление у них одно и то же, вернуть False.
  • Ромб 0 -> 1, 0 -> 2, 1 -> 3, 2 -> 3 циклов не содержит: вершина 3 достигается двумя путями, но это не цикл.

Гарантируется, что все номера вершин лежат в диапазоне от 0 до n - 1.

заготовка решения

def has_cycle(n: int, edges: list[tuple[int, int]]) -> bool:
    # ваш код
    pass

🔒 Проверка ответа — для участников клуба

  • Автотесты прямо в браузере
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела