Задание 9. Пути с условием: через город и в обход города — теория и разбор
Совет: выделите текст, чтобы спросить у ИИ, или наведите (на телефоне — тапните) на подчёркнутое слово — увидите подсказку.
Задание 9. Пути с условием: через город и в обход города — теория и разбор
Усложнённая версия задания 9 просит посчитать не все пути, а только те, что проходят через конкретный город — или наоборот, его избегают. Метод тот же, что и для обычного подсчёта, но с одним дополнительным приёмом.
Что нужно знать
Если нужно посчитать пути из A в конечный город, проходящие через промежуточный город X, задачу удобно разбить на две части:
(число путей из A в X) × (число путей из X до конца)
Это работает, потому что дорога не образует циклов: путь через X — это сначала путь до X, а потом отдельный путь от X дальше, и любую комбинацию «первая половина + вторая половина» можно взять независимо.
Пути, проходящие через X, и пути, не проходящие через X, вместе составляют вообще все пути — поэтому «в обход X» считать отдельно не обязательно: достаточно вычесть число путей через X из общего числа путей.
Формула для двух вариантов задания: путей через X = (путей A→X) × (путей X→конец); путей в обход X = (всего путей A→конец) − (путей через X).
Разбор примера
Схема дорог связывает города A, B, C, D, E, F, G одностороннего движения:
A→B, A→C, B→D, C→D, C→E, D→F, E→F, E→G, F→G.
Сколько существует путей из города A в город G, проходящих через город D?
Как думать. Считаем отдельно число путей от A до D и число путей от D до G, а затем перемножаем — потому что каждый путь A→D можно свободно продолжить любым путём D→G.
Показать решение и ответ
Шаг 1. Пути из A в D (считаем как в обычном задании, только до D):
- A = 1
- B = A = 1 (дорога A→B)
- C = A = 1 (дорога A→C)
- D = B + C = 1 + 1 = 2
Шаг 2. Пути из D в G (считаем в обратную сторону, от D как от нового старта, только по вершинам, куда можно попасть из D):
- D = 1 (новый старт)
- F = D = 1 (дорога D→F; на E из D дороги нет)
- G = F = 1 (дорога F→G; на G дороги от E тоже нет, так как E недостижим из D)
Итого путей D → G = 1.
Шаг 3. Перемножаем: путей через D = 2 × 1 = 2.
Проверка: если посчитать вообще все пути A→G (без условия) тем же способом последовательного подсчёта, получится 4 пути. Путей через D — 2, значит путей в обход D тоже 4 − 2 = 2. Это можно проверить, выписав все 4 пути вручную: A-B-D-F-G, A-C-D-F-G (через D), A-C-E-F-G, A-C-E-G (в обход D) — ровно 2 и 2.
Ответ: 2
Как решить в Python
edges = {
'A': ['B', 'C'], 'B': ['D'], 'C': ['D', 'E'],
'D': ['F'], 'E': ['F', 'G'], 'F': ['G'], 'G': [],
}
order = ['A', 'B', 'C', 'D', 'E', 'F', 'G']
def count_paths(start, edges, order):
idx = order.index(start)
sub_order = order[idx:]
count = {v: 0 for v in sub_order}
count[start] = 1
for v in sub_order[1:]:
count[v] = sum(count[u] for u in sub_order if v in edges.get(u, []))
return count
a_to_d = count_paths('A', edges, order)['D']
d_to_g = count_paths('D', edges, order)['G']
print('через D:', a_to_d * d_to_g) # 2
total = count_paths('A', edges, order)['G']
print('всего A->G:', total) # 4
print('в обход D:', total - a_to_d * d_to_g) # 2
Похожие материалы
Задание 9. Подсчёт путей по схеме дорог — теория и разбор
Подсчёт всех путей
Метод последовательного подсчёта путей на графе-схеме дорог — разбор примера и проверка в Python.
Подсчёт путей на графе: тренажёр
Шесть листов с задачами на подсчёт количества путей на схеме дорог (графе) для задания 9 ОГЭ по информатике. Материалы: ФИПИ, открытый банк заданий.
Анализ схемы дорог: сборник задач
Шесть листов с задачами на анализ схемы дорог и подсчёт различных путей для задания 9 ОГЭ по информатике. Материалы: ФИПИ, открытый банк заданий.
Графы дорог: практикум
Шесть листов с задачами на определение количества путей в графе дорог для задания 9 ОГЭ по информатике. Материалы: ФИПИ, открытый банк заданий.
Задание 16. Программирование на языке программирования — теория и разбор
Типовой шаблон решения: цикл + условие делимости + счётчик — разбор примера на Python и Паскале.
Задание 15. Алгоритм для исполнителя Робот — теория и разбор
Команды Робота, циклы «пока свободно» и алгоритм, работающий для поля любого размера — разбор примера и проверка в Python.