1. Главная
  2. Библиотека
  3. Программирование
  4. Дан ориентированный граф. Требуется определить, есть ли...
Решение задачи на тему

Дан ориентированный граф. Требуется определить, есть ли в нем цикл. Обратите внимание на третий тест и подумайте, почему в нем нет цикла. Формат входных данных В первой строке вводится число n - количество вершин и m - количество ребер. ( 1 ≤slant n, m

  • Программирование
  • #Основы алгоритмизации и программирования
  • #Структуры и алгоритмы обработки данных
Дан ориентированный граф. Требуется определить, есть ли в нем цикл. Обратите внимание на третий тест и подумайте, почему в нем нет цикла. Формат входных данных В первой строке вводится число n - количество вершин и m - количество ребер. ( 1 ≤slant n, m

Условие:

Дан ориентированный граф. Требуется определить, есть ли в нем цикл. Обратите внимание на третий тест и подумайте, почему в нем нет цикла.
Формат входных данных
В первой строке вводится число n - количество вершин и m - количество ребер. ( 1 ≤slant n, m ≤slant 105 ). Далее в m строках следует по 2 числа u, v - вершины графа, соединенные ребром.
Формат выходных данных
Выведите 0, если в заданном графе нет цикла, и 1 , если он есть.
Примеры

стандартный вводстандартный вывод
441
12
234
34
320
12
13
33
12
233
1

Решение:

Для определения наличия цикла в ориентированном графе можно использовать алгоритм обхода в глубину (DFS). Мы будем отслеживать состояние каждой вершины: не посещенная, посещенная и в процессе посещения. Если мы обнаружим вершину, которая уже находится в процессе посещения, это означает, что мы нашли цикл.

Вот пример реализации на Python:

  1. : Мы используем список смежности для представления графа.
  2. : Массив используется для отслеживания состояния каждой вершины:
    • не посещена
    • в процессе посещения
    • посещена
  1. : Рекурсивная функция проверяет наличие цикла, помечая вершины в процессе обхода.
  2. : Мы запускаем DFS для каждой непосещенной вершины.
  • Для графа с вершинами 4 и рёбрами 4, где есть цикл, программа вернет .
  • Для графа с 3 вершинами и 2 рёбрами без цикла, программа вернет .

Этот алгоритм работает за O(n + m), что подходит для ограничений задачи.

Выбери предмет