Все темы
92

Есть ли цикл?

Tier 2Закрыто

Где применяется

1. Задача

У тебя есть граф и один вопрос к нему: есть ли путь, который выходит из узла, проходит через другие узлы и возвращается туда, откуда вышел? Такое кольцо называют циклом (cycle). В карте дорог, где можно проехать по кругу, цикл есть. В генеалогическом древе его нет.

Ты уже умеешь обходить граф: в ширину с очередью (шаг 88) и в глубину, когда идёшь по одному пути до конца и потом возвращаешься (шаг 89). Обход сразу отвечает на вопрос про цикл. Если во время обхода ты пришёл в узел, где уже был, ты, возможно, нашёл кольцо.

Сложность в слове «возможно». Точное правило разное для двух видов графа, и неверное правило находит циклы там, где их нет. В этом уроке разберём оба правила.

Этот шаг из платной части

Бесплатные шаги в начале курса (их 33) открыты всем: урок, задача и тесты. Этот шаг открывается с полным доступом. Начни с бесплатного аккаунта и бесплатных шагов.

Завести бесплатный аккаунтПосмотреть, что входит

На LeetCode

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

Мы используем необходимые куки для работы сайта (вход и язык). Если ты согласишься, мы также загрузим Google Analytics, чтобы видеть, какие страницы читают, и Google reCAPTCHA для защиты форм обратной связи и сообщений об ошибке от спама. Политика конфиденциальности