ОГЭ · Информатика · Графы, схемы и анализ таблиц (задания 4, 9, 14)
Задание 4: кратчайший путь в графе
В задании 4 дана таблица или список дорог с длинами. Надо найти длину кратчайшего пути между двумя пунктами. Ответ — число, а не маршрут, но маршрут всё равно приходится найти.
- ⚠Берут прямую дорогу, не проверив более короткий обходной путь
- ⚠Проходят через один пункт дважды (в ОГЭ каждый пункт — не более одного раза)
- ⚠Ошибаются при сложении длин участков
Графы и взвешенные рёбра
Определение
Граф — набор вершин (пунктов) и соединяющих их рёбер (дорог). Если у ребра есть длина — граф взвешенный
Определение
Кратчайший путь — маршрут между двумя вершинами с наименьшей суммой длин рёбер. Каждую вершину проходим не более одного раза
Как искать кратчайший путь
• Составь по таблице схему связей между пунктами.
• Выпиши все маршруты от старта к финишу (перебор).
• Для каждого сложи длины участков.
• Выбери маршрут с наименьшей суммой.
Почему прямая дорога почти никогда не выигрывает
Задание составлено так, чтобы наивный ответ был неверным. Прямое ребро между нужными пунктами почти всегда есть, и оно почти всегда длиннее, чем обход через две-три промежуточные вершины. Поэтому первое, что надо сделать, — не выписывать ответ сразу, а перебрать все маршруты. Практический порядок работы такой. Шаг 1: перерисуй граф в виде схемы, чтобы связи были видны глазами; по таблице их не видно. Шаг 2: выпиши все маршруты от старта к финишу, двигаясь систематически: сначала все, что начинаются с первого соседа старта, потом со второго, и так далее. Шаг 3: для каждого маршрута сложи длины рёбер и подпиши сумму. Шаг 4: выбери наименьшую. Условие «каждый пункт можно посетить не более одного раза» есть всегда, и оно резко ограничивает перебор: в графе из шести вершин маршрутов обычно не больше десятка, их реально выписать целиком за пару минут.
Ловушка: самая короткая по числу рёбер дорога не всегда самая короткая по длине. Прямое ребро A–D может быть длиннее обхода A–B–C–D.
Метод пометок: как обойтись без полного перебора
Когда вершин много, перебор становится громоздким, и удобнее работать методом пометок — упрощённым алгоритмом Дейкстры. Возле старта пишем 0, возле всех остальных вершин — прочерк. Дальше повторяем один и тот же ход: выбираем среди непомеченных вершину с наименьшей текущей пометкой, объявляем её окончательной и обновляем её соседей. Сосед получает новую пометку, если «пометка текущей вершины + длина ребра» меньше, чем то, что у него записано сейчас. Когда окончательной становится финишная вершина, её пометка и есть ответ. Метод хорош тем, что каждое ребро рассматривается ровно один раз и невозможно «потерять» маршрут. Проверять себя удобно так: пометка никогда не растёт, она может только уменьшаться, и она никогда не бывает больше длины любого найденного тобой маршрута.
Разбор примера
Разбор перебором: все маршруты выписаны
Дороги: A–B 3 км, A–C 9 км, B–C 2 км, B–D 6 км, C–D 1 км, C–E 6 км, D–E 2 км. Определите длину кратчайшего пути между A и E.
Показать решение по шагам
- 1. Из A выходят два ребра: в B (3) и в C (9). Значит маршрутов будет две группы.
- 2. Группа «через B»: A–B–C–E = 3 + 2 + 6 = 11; A–B–C–D–E = 3 + 2 + 1 + 2 = 8; A–B–D–E = 3 + 6 + 2 = 11; A–B–D–C–E = 3 + 6 + 1 + 6 = 16.
- 3. Группа «через C»: A–C–E = 9 + 6 = 15; A–C–D–E = 9 + 1 + 2 = 12; A–C–B–D–E = 9 + 2 + 6 + 2 = 19.
- 4. Сравниваем все суммы: 8, 11, 11, 12, 15, 16, 19. Наименьшая — 8.
- 5. Кратчайший путь оказался самым длинным по числу рёбер: A–B–C–D–E, целых четыре участка. Прямая дорога A–C длиной 9 в кратчайший путь вообще не вошла.
- 6. В ответ записываем только число: 8.
Ответ: Ответ: 8
Разбор примера
Тот же граф методом пометок
Те же дороги: A–B 3, A–C 9, B–C 2, B–D 6, C–D 1, C–E 6, D–E 2. Найдите длину кратчайшего пути от A до E методом пометок.
Показать решение по шагам
- 1. Ставим пометки: A = 0, остальные пока не определены.
- 2. Обрабатываем A. Соседи: B получает 0 + 3 = 3, C получает 0 + 9 = 9.
- 3. Наименьшая непомеченная — B (3). Обрабатываем её: C можно улучшить до 3 + 2 = 5 (это меньше 9), D получает 3 + 6 = 9.
- 4. Наименьшая непомеченная — C (5). Обрабатываем: D улучшаем до 5 + 1 = 6 (меньше 9), E получает 5 + 6 = 11.
- 5. Наименьшая непомеченная — D (6). Обрабатываем: E улучшаем до 6 + 2 = 8 (меньше 11).
- 6. Осталась одна вершина E с пометкой 8 — она и становится окончательной. Ответ совпал с перебором: 8.
- 7. Обрати внимание, как пометка C менялась: сначала 9, потом 5. Именно это уточнение и даёт правильный ответ; тот, кто зафиксировал 9 сразу, получит 12 вместо 8.
Ответ: Ответ: 8
Вопрос на проверку
Дороги: A–B 4, A–C 1, B–C 2, B–D 3, C–D 9. Чему равна длина кратчайшего пути от A до D?
Ответить и проверить себя — после бесплатной регистрации.
Вопрос на проверку
Что означает условие «каждый пункт можно посетить не более одного раза»?
Ответить и проверить себя — после бесплатной регистрации.
Как оформлять перебор, чтобы не сбиться. Выписывай маршруты столбиком, каждый со своей суммой, и группируй их по первому шагу из старта. Так сразу видно, какие варианты уже рассмотрены. Складывай числа слева направо по ходу маршрута, а не в уме целиком: три-четыре двузначных слагаемых — это именно то место, где теряется балл при абсолютно верной идее решения.
Метод Дейкстры (упрощённо): помечай каждую вершину минимальным известным расстоянием от старта и последовательно обновляй соседей.
Разбор примера
Задание 4: кратчайший путь по таблице расстояний
Между населёнными пунктами построены дороги, протяжённость которых приведена в таблице. Пустая клетка означает, что прямой дороги нет. A—B 1, A—C 1, A—D 2, A—F 9, B—C 7, B—D 3, B—F 6, C—D 3, C—E 1, D—E 5, E—F 7. Определите длину кратчайшего пути между A и F.
Показать решение по шагам
- 1. Сначала выписываем все дороги, ведущие в F: A—F (9), B—F (6), E—F (7). Значит, попасть в F можно только через A напрямую, через B или через E.
- 2. Считаем лучшие расстояния до этих пунктов от A: до B — 1 (напрямую), до E — через C: A—C (1) + C—E (1) = 2 (напрямую из A дороги в E нет, через D вышло бы 2 + 5 = 7).
- 3. Складываем три варианта: напрямую A—F = 9; через B: 1 + 6 = 7; через E: 2 + 7 = 9.
- 4. Наименьшее: 7, путь A—B—F.
- 5. Почему это надёжнее полного перебора: маршрутов в такой таблице десятки, а дорог в конечный пункт всего три. Считать надо только лучшие пути до этих трёх пунктов — работа сокращается в разы.
Ответ: 7
Разбор примера
Задание 4: тот же приём при другой таблице
Дороги: A—B 2, A—C 4, B—C 1, B—D 7, C—D 3, C—E 8, D—E 2, D—F 6, E—F 1. Определите длину кратчайшего пути между A и F.
Показать решение по шагам
- 1. Дороги в F: D—F (6) и E—F (1). Значит, нужны лучшие расстояния от A до D и до E.
- 2. До B: 2. До C: напрямую 4 или через B 2 + 1 = 3 — берём 3.
- 3. До D: через B 2 + 7 = 9 или через C 3 + 3 = 6 — берём 6.
- 4. До E: через C 3 + 8 = 11 или через D 6 + 2 = 8 — берём 8.
- 5. Варианты финиша: через D 6 + 6 = 12; через E 8 + 1 = 9. Кратчайший путь 9: A—B—C—D—E—F.
- 6. Важная деталь: путь из пяти дорог оказался короче пути из двух. Число участков ничего не говорит о длине — сравнивать надо только суммы.
Ответ: 9
Разбор примера
Задание 4: когда прямая дорога не самая короткая
Дороги: A—B 1, B—C 1, A—C 5. Определите длину кратчайшего пути между A и C и объясните, почему ответ не 5.
Показать решение по шагам
- 1. Вариант первый — прямая дорога A—C: 5 км.
- 2. Вариант второй — через B: A—B (1) + B—C (1) = 2 км.
- 3. Кратчайший путь — 2, и он идёт в обход, хотя прямая дорога существует.
- 4. Вывод, который спасает на экзамене: наличие прямой дороги не значит, что она кратчайшая. Проверять обходные пути обязательно — именно на этом построена половина заданий линии 4.
- 5. Проверка на смысл: в таблице такие случаи видны сразу — в строке стоит одно большое число и несколько маленьких.
Ответ: 2
Разбор примера
Файл-ответ paths.py (формат задания 16): программа, перебирающая маршруты
Соберите программу, которая по списку дорог находит длину кратчайшего пути между двумя пунктами. Файл сохраняется как paths.py.
Показать решение по шагам
- 1. Замысел: храним дороги словарём, идём по методу пометок — начинаем с пункта A с расстоянием 0 и каждый раз берём ближайший ещё не обработанный пункт, обновляя расстояния до его соседей. Это машинная запись того же приёма, которым решали задание вручную.
- 2. Код целиком (Python):
roads = {('A','B'):1, ('A','C'):1, ('A','D'):2, ('A','F'):9, ('B','C'):7, ('B','D'):3, ('B','F'):6, ('C','D'):3, ('C','E'):1, ('D','E'):5, ('E','F'):7}/INF = 10**9/dist = {v: INF for v in 'ABCDEF'}/dist['A'] = 0/done = set()/while len(done) < 6:/v = min((u for u in dist if u not in done), key=lambda u: dist[u])/done.add(v)/for (a, b), w in roads.items():/for x, y in ((a, b), (b, a)):/if x == v and dist[v] + w < dist[y]:/dist[y] = dist[v] + w/print(dist['F']). - 3. Трассировка: сначала обрабатывается A (dist: B = 1, C = 1, D = 2, F = 9), затем B (D остаётся 2, потому что 1 + 3 = 4 больше; F = 1 + 6 = 7), затем C (E = 1 + 1 = 2), затем D, затем E (F = 2 + 7 = 9 — больше семи, не обновляется). Печатается 7, что совпало с ручным ответом.
- 4. Что проверить перед сдачей: каждая дорога должна работать в обе стороны (за это отвечает строка с
((a, b), (b, a))) и вывод должен быть один, после цикла. Обе вещи прямо названы в критериях задания 16. - 5. Как сохранять: текстовый файл с расширением .py.
Ответ: paths.py: метод пометок, печатает 7 для таблицы из первого разбора
ℹ️ Спецификация КИМ ОГЭ-2026 по информатике: «Решением каждого задания части 2 является отдельный файл, подготовленный в соответствующей программе (текстовом редакторе или электронной таблице)». Линия 14 — 3 балла и 30 минут, самое дорогое задание работы.
Задание №4 в формате экзамена
Ответить и проверить себя — после бесплатной регистрации.
Задание №4 в формате экзамена
Ответить и проверить себя — после бесплатной регистрации.
Задание №4 в формате экзамена
Ответить и проверить себя — после бесплатной регистрации.
Задание №4 в формате экзамена
Ответить и проверить себя — после бесплатной регистрации.
Задание №4 в формате экзамена
Ответить и проверить себя — после бесплатной регистрации.