Site icon Информатика Эксперт

Задание 23 ЕГЭ по информатике 2027: графы, кратчайший путь и количество путей

ЕГЭ информатика 23 задание разбор, теория, как решать.

Задание 23 ЕГЭ по информатике 2027: графы, кратчайший путь и количество путей

В задании 23 ЕГЭ по информатике проверяется умение работать с графами и решать алгоритмические задачи,
связанные с их анализом.

В спецификации задания указаны следующие основные направления:

  • основные понятия графов;
  • виды графов;
  • построение оптимального пути между вершинами графа;
  • определение количества различных путей между вершинами ориентированного ациклического графа.

Для успешного решения задания 23 необходимо понимать, как устроен граф, как он хранится в файле
и какие алгоритмы использовать для разных типов задач.

1. Что такое граф

Граф — это структура, состоящая из вершин и рёбер.

Например:

Здесь числа 1, 2, 3, 4 и 5 — это вершины графа,
а стрелки между ними — рёбра.

Основные понятия

Понятие Описание
Вершина Отдельный объект графа
Ребро Связь между двумя вершинами
Путь Последовательность рёбер, по которым можно перейти из одной вершины в другую
Вес ребра Числовое значение, соответствующее ребру
Длина пути Сумма весов всех рёбер, входящих в путь

2. Ориентированный граф

В ориентированном графе каждое ребро имеет направление.

Например:

означает, что можно перейти из вершины 1 в вершину 2.
Это не означает, что можно автоматически перейти обратно:

Такое ребро должно быть задано отдельно.

3. Неориентированный граф

В неориентированном графе ребро не имеет направления.

Это означает, что можно перейти как из 1 в 2, так и из 2 в 1.

4. Взвешенный граф

Если каждому ребру соответствует некоторое число, такой граф называется
взвешенным.

Например:

Длина пути

равна:

5. Ациклический граф

Ациклический граф — это граф, в котором невозможно,
двигаясь по рёбрам, вернуться в исходную вершину.

Например:

Цикла здесь нет.

А в графе

есть цикл:

Поэтому такой граф не является ациклическим.

Ориентированный ациклический граф часто обозначают сокращением
DAG — Directed Acyclic Graph.

6. Как граф хранится во входном файле

В задании граф обычно задаётся в текстовом файле.
Каждая строка может содержать:

где:

  • L — начальная вершина;
  • M — конечная вершина;
  • W — вес ребра.

Например:

Эти строки описывают рёбра:

7. Как хранить граф в Python

Один из самых удобных способов — использовать список смежности.

Для каждой вершины создаётся отдельный список рёбер.

Читаем файл:

Например, если есть строки:

то:

будет содержать:

8. Основные типы задания 23

По формулировке спецификации можно выделить два главных направления:

Тип задачи Основной метод
Поиск оптимального или кратчайшего пути Алгоритм Дейкстры или динамика на DAG
Количество различных путей Рекурсия с мемоизацией или динамическое программирование

9. Алгоритм Дейкстры

Алгоритм Дейкстры используется для поиска кратчайшего пути
в графе с неотрицательными весами рёбер.

Типичная формулировка:

Найдите длину кратчайшего пути из вершины 1 в вершину 100.

Основная идея алгоритма

Для каждой вершины храним минимальное найденное расстояние от стартовой вершины.

Например:

означает, что расстояние от вершины 1 до самой себя равно 0.

Остальные расстояния сначала считаем бесконечно большими:

Очередь с приоритетом

Для алгоритма Дейкстры удобно использовать модуль heapq.

Он позволяет быстро получать вершину, до которой найдено минимальное расстояние.

Создаём очередь:

Пара означает:

Полный шаблон алгоритма Дейкстры

10. Как работает алгоритм Дейкстры

Рассмотрим пример:

Сначала можно попасть напрямую:

Затем находится путь:

Его длина:

Он короче 12, поэтому значение обновляется:

Затем находится путь:

Его длина:

Теперь:

Это и есть кратчайший путь.

11. Что делает условие nd < d[to]

Одна из самых важных строк алгоритма:

Здесь:

  • nd — новое расстояние;
  • d[to] — лучшее расстояние, найденное раньше.

Если новый путь короче старого, значение заменяется:

12. Зачем нужен heapq

Функция:

добавляет новый элемент в очередь.

Функция:

извлекает элемент с минимальным первым значением.

То есть если в очереди:

первой будет извлечена вершина 4, потому что расстояние 2.5 минимально.

13. Почему используется float(‘inf’)

Запись:

означает бесконечно большое число.

Поэтому в начале можно записать:

Это означает, что пока расстояние до всех вершин неизвестно.

Для начальной вершины:

14. Когда используется int()

Если в условии сказано:

Запишите целую часть длины кратчайшего пути.

необходимо использовать:

Например:

даёт:

Это не округление, а отбрасывание дробной части.

15. Количество различных путей

Второй важный тип задания 23 связан с подсчётом количества различных путей
между двумя вершинами ориентированного ациклического графа.

Например:

Сколько существует различных путей из вершины 1 в вершину 100?

Здесь алгоритм Дейкстры не нужен, потому что нас интересует не длина пути,
а количество возможных маршрутов.

16. Простой пример подсчёта путей

Пусть граф имеет вид:

Существует два пути:

Следовательно, ответ равен 2.

17. Подсчёт путей с помощью рекурсии

Для ациклического графа удобно использовать рекурсивную функцию.

Логика очень простая:

Если мы дошли до конечной вершины 100, значит найден один путь:

Для каждой следующей вершины подсчитываем количество путей:

18. Зачем нужна мемоизация

Одна и та же вершина может встречаться в нескольких путях.
Чтобы не вычислять результат для неё много раз,
можно использовать:

и декоратор:

Полный вариант:

19. Если граф хранит веса рёбер

Если в списке смежности хранятся пары:

то цикл будет выглядеть так:

Вес здесь не используется, потому что мы считаем только количество путей.

20. Кратчайший путь в ациклическом графе с помощью рекурсии

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

Функция:

возвращает минимальное расстояние от вершины v
до вершины 100.

Для конечной вершины:

Для остальных вершин выбирается минимальный вариант:

21. Максимальный путь в DAG

В ориентированном ациклическом графе можно аналогичным способом искать
и самый длинный путь.

Главное отличие — вместо min() используется max().

22. Динамическое программирование на графе

Мемоизация с помощью lru_cache — это один из вариантов
динамического программирования.

Идея заключается в том, что результат для каждой вершины вычисляется один раз,
а затем сохраняется.

Например:

может означать:

  • количество путей из 7 в 100;
  • минимальную длину пути из 7 в 100;
  • максимальную длину пути из 7 в 100.

Смысл функции зависит от конкретного условия задачи.

23. Как выбрать нужный алгоритм

Формулировка задачи Подход
Найдите длину кратчайшего пути Алгоритм Дейкстры
Найдите минимальную сумму весов Алгоритм Дейкстры
Найдите минимальную стоимость маршрута Алгоритм Дейкстры
Определите количество различных путей Рекурсия + мемоизация
Найдите кратчайший путь в DAG Дейкстра или динамика
Найдите максимальную длину пути в DAG Динамическое программирование

24. Шаблон 1 — кратчайший путь

25. Шаблон 2 — количество различных путей

26. Шаблон 3 — количество путей, если в файле есть вес

27. Шаблон 4 — минимальный путь в DAG

28. Что необходимо знать для задания 23

Для решения задания 23 рекомендуется уверенно понимать следующие темы:

  • что такое вершина и ребро графа;
  • ориентированный и неориентированный граф;
  • взвешенный граф;
  • ациклический граф;
  • путь и длина пути;
  • чтение графа из файла;
  • список смежности;
  • алгоритм Дейкстры;
  • работу heapq;
  • рекурсию;
  • мемоизацию с помощью lru_cache;
  • динамическое программирование на ориентированном ациклическом графе;
  • подсчёт количества различных путей.

29. Главное для ЕГЭ

Перед написанием программы необходимо определить, что именно требуется найти.

Если в условии встречаются слова:

в первую очередь следует подумать об алгоритме Дейкстры.

Если требуется:

для ориентированного ациклического графа удобно использовать
рекурсию с мемоизацией или динамическое программирование.

Таким образом, для задания 23 особенно важно не просто запомнить один код,
а научиться определять тип задачи и выбирать подходящий алгоритм.

Exit mobile version