Егэ информатика подсчет путей


Пройти тестирование по этим заданиям
Вернуться к каталогу заданий

Версия для печати и копирования в MS Word

1

На рисунке  — схема дорог, связывающих города А, Б, В, Г, Д, Е, Ж, З, И, К. По каждой дороге можно двигаться только в одном направлении, указанном стрелкой. Сколько существует различных путей из города А в город К?


2

На рисунке  — схема дорог, связывающих города А, Б, В, Г, Д, Е, Ж, З, И, К. По каждой дороге можно двигаться только в одном направлении, указанном стрелкой. Сколько существует различных путей из города А в город Ж?


3

На рисунке  — схема дорог, связывающих города А, Б, В, Г, Д, Е, Ж, З, И, К. По каждой дороге можно двигаться только в одном направлении, указанном стрелкой. Сколько существует различных путей из города А в город Ж?


4

На рисунке  — схема дорог, связывающих города А, Б, В, Г, Д, Е, Ж, З, И, К. По каждой дороге можно двигаться только в одном направлении, указанном стрелкой. Сколько существует различных путей из города А в город К?


5

На рисунке  — схема дорог, связывающих города А, Б, В, Г, Д, Е, Ж, З, И, К. По каждой дороге можно двигаться только в одном направлении, указанном стрелкой. Сколько существует различных путей из города А в город К?

Пройти тестирование по этим заданиям

Автор — Лада Борисовна Есакова.

Подсчет путей в ориентированном графе. ЗАДАЧА № 15.

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

Рассмотрим простой и эффективный способ решения.

В этой задаче мы имеем дело с ориентированным графом (графом, у которого ребра имеют направление). Т.е. ребра имеют вид стрелок. Две вершины, соединенные напрямую стрелкой, называются смежными. Вершина, из которой выходит стрелка, называется предком, а вершина, в которую входит стрелка – потомком.

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

Пример:

На рисунке – схема дорог, связывающих города А, Б, В, Г, Д, Е, Ж, З, И, К. По каждой дороге можно двигаться только в одном направлении, указанном стрелкой. Сколько существует различных путей из города А в город Ж?

1
Решение:

Каждой вершине, начиная с начальной (A), поставим в соответствие индекс, равный количеству путей, которыми можно попасть в эту вершину. Для вершины A (начало пути) индекс всегда равен 1 (в начало пути можно попасть единственным образом – никуда не двигаясь). Теперь сформулируем правило: индекс вершины равен сумме индексов его предков. Исходя из этого индекс Б равен 1 (предок у Б один – вершина A).

У вершины Д предками являются А и Б, значит индекс вершины Д равен 1+1=2.

2

Очевидно, что мы можем посчитать индекс только тех вершин, индексы предков которых уже посчитаны. Например, мы не можем посчитать индекс Г, пока не посчитан индекс В. Двигаясь последовательно, мы рассчитаем индексы всех вершин.

Индекс вершины Ж и будет ответом задачи.

3
Ответ: 11

Благодарим за то, что пользуйтесь нашими статьями.
Информация на странице «Задача №15. Графы. Поиск количества путей.» подготовлена нашими авторами специально, чтобы помочь вам в освоении предмета и подготовке к экзаменам.
Чтобы успешно сдать необходимые и поступить в ВУЗ или колледж нужно использовать все инструменты: учеба, контрольные, олимпиады, онлайн-лекции, видеоуроки, сборники заданий.
Также вы можете воспользоваться другими статьями из разделов нашего сайта.

Публикация обновлена:
08.03.2023

Хотите готовиться со мной к ЕГЭ?
Пишите: 
ydkras@mail.ru
Немного обо мне.

В задаче 13 ЕГЭ по информатике требуется подсчитать число путей из одного узла в другой.

Вот типичная задача (заимствована из демонстрационного варианта ФИПИ по информатике 2022 г.):

 

«На рисунке представлена схема дорог, связывающих города А, Б, В, Г, Д, Е, Ж, З, И, К, Л, М. По каждой дороге можно двигаться только в одном направлении, указанном стрелкой.Сколько существует различных путей из города А в город М, проходящих через город В?»

Как решать подобные задачи программным путем? Прежде всего надо уметь представлять информацию о графе в форме, удобной для компьютерной обработки. В языке Питон есть очень удобный тип данных для нашей цели: словарь или ассоциативный массив. Это совокупность пар «ключ-значение». 

Сначала подготовим исходные данные для заполнения словаря. Создадим текстовый файл, строки которого устроены следующим образом: первая буква строки — это один из городов, а следующие буквы — список городов, в которые можно попасть из данного города.

Для данного графа файл будет таким:

АБВГД
БВЕ
ВЖЗ
ГВЗ
ДГЗ
ЕЖИ
ЖИ
ЗЖИ
ИКЛ
КМ
ЛМ
М

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

Напишем фрагмент программы, которая введет этот файл и создаст словарь. описывающий граф:

a={}
f=open(‘in.txt’)
for s in f:
    s=s.strip()
    if len(s)>0: a[s[0]]=s[1:]

 print(a)

Вначале создается пустой словарь (словари заключаются в фигурные скобки). Затем файл с описанием графа читается построчно, и первый символ строки используется как ключ, а остальные — как значение, соответствующее данному ключу. Добавление в словарь — это просто присваивание элементу словаря с некоторым ключом значения. Если такой элемент уже существует, то значение будет перезаписано, в противном случае будет создан новый элемент. Метод strip удаляет пробелы и символы конца строки в начале строки и её конце — это нужно, чтобы убрать символы конца строки. Проверка len(s)>0 нужна, чтобы не обрабатывать пустые строки (если они окажутся в файле, это вызовет обибку выполнения). Первый символ каждой строки, т.е. s[0], используется как ключ в словаре, а хвост строки (все символы, кроме первого) — как значение, связанное с этим ключом.

Для контроля распечатаем словарь:

{‘А’: ‘БВГД’, ‘Б’: ‘ВЕ’, ‘В’: ‘ЖЗ’, ‘Г’: ‘ВЗ’, ‘Д’: ‘ГЗ’, ‘Е’: ‘ЖИ’, ‘Ж’: ‘И’, ‘З’: ‘ЖИ’, ‘И’: ‘КЛ’, ‘К’: ‘М’, ‘Л’: ‘М’, ‘М’: »}

Теперь всё готово для того, чтобы написать программу, которая ищет решение.

Простой случай — подсчёт количества путей

Сначала решим более протую задачу: подсчитаем число путей из А в М без каких-либо дополнительных ограничений. 

Для этого напишем рекурсивную функцию ways:

def ways(start,end,karta):
    if start==end: return 1
    r=0
    for i in range(len(karta[start])): r += ways(karta[start][i],end,karta)
    return r

Функция подсчитывает число путей из города start в город end. Граф дорог задается в параметре karta, который должен быть словарем с описанной выше структурой. 

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

Число путей из города А в город М — это результат вычисления функции ways(‘А’,’М’,a). Разумеется, буквы ‘А’ и ‘М’ в параметрах функции должны быть русскими, а не латинскими.

Приведём программу полностью:

def ways(start,end,karta):
    if start==end: return 1
    r=0
    for i in range(len(karta[start])): r += ways(karta[start][i],end,karta)
    return r

a={}
f=open(‘in.txt’)
for s in f:
    s=s.strip()
    if len(s)>0: a[s[0]]=s[1:]

print(ways(‘А’,’М’,a))

Ограничения на маршрут: запрещенные города и города, обязательные для посещения

Выше был рассмотрен самый простой вариант задачи 13: подсчет числа путей без каких-либо ограничений. Но очень часто требуется считать лишь маршруты, которые проходят через какой-то город и/или не должны проходить через другой город.

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

Подсчитаем число маршрутов от А до В, а затем от В до М. Любой маршрут первого этапа можно комбинировать с маршрутом второго этапа, поэтому общее число маршрутов — это произведение числа маршрутов первого этапа на число маршрутов второго этапа. Таким образом, задача решается заменой последней строки в приведенной выше программе на строку

print(ways(‘А’,’В’,a)*ways(‘В’,’М’,a))

Если какой-то город запрещен для посещения, то можно найти сперва общее число маршрутов от начального пункта до конечного, затем — число маршрутов, которые проходят через данный город. Число маршрутов, которые не проходят через этот город, равно разности общего числа маршрутов и числа маршрутов, проходящих через данный город.

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

print(ways(‘А’,’М’,a) — ways(‘А’,’В’,a)*ways(‘В’,’М’,a))

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

Функция может выглядеть, например, так:

def ways(start,end,karta,zapret):
    if start in zapret: return 0
    if start==end: return 1
    r=0
    for i in range(len(karta[start])): r += ways(karta[start][i],end,karta,zapret)
    return r

В нее добавлен новый параметр zapret — это символьная строка, содержащая города, маршруты через которые не учитываются. Если символ start содержится в этой строке, то функция возвращает 0. Строка zapret может состоять более чем из одного символа: в этом случае будут учтены только те маршруты, которые не проходят через любой из городов, перечисленных в этой строке.

Число маршрутов из А в М, не проходящих через город В, можно найти так:

def ways(start,end,karta,zapret):
    if start in zapret: return 0
    if start==end: return 1
    r=0
    for i in range(len(karta[start])): r += ways(karta[start][i],end,karta,zapret)
    return r

a={}
f=open(‘in.txt’)
for s in f:
    s=s.strip()
    if len(s)>0: a[s[0]]=s[1:]

print(ways(‘А’,’М’,a,’В’))

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

print(ways(‘А’,’М’,a,»)-ways(‘А’,’М’,a,’В’))

(Если параметр zapret — это пустая строка, то ограничений на подсчет маршрутов нет.)

Обязательный и избегаемый города

Если требуется, чтобы маршрут обязательно проходил через какой-либо город и не проходил через другой, то можно решить задачу, разбив путь на два этапа, как было описано ранее. На каждом этапе мы задаем запрещенный город в параметре zapret.

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

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

def ways(start,end,karta,zapret):
    if start in zapret: return 0
    if start==end: return 1
    r=0
    for i in range(len(karta[start])): r += ways(karta[start][i],end,karta,zapret)
    return r

a={}
f=open(‘in.txt’)
for s in f:
    s=s.strip()
    if len(s)>0: a[s[0]]=s[1:]

print(ways(‘А’,’В’,a,’Ж’)*ways(‘В’,’М’,a,’Ж’))
print(ways(‘А’,’М’,a,’Ж’)-ways(‘А’,’М’,a,’ВЖ’))

В некоторых задачах ограничение формулируется примерно так: «сколько существует маршрутов, проходящих либо через город В, либо через город З, либо через оба эти города?» Решение простое: следует из общего числа маршрутов вычесто число маршрутов, которые не проходят ни через В, ни через З:

print(ways(‘А’,’М’,a,»)-ways(‘А’,’М’,a,’ВЗ’))

Ещё один вариант ограничения — найти число маршрутов, которые проходят либо через пункт В, либо через пункт З, но не через оба этих пункта одновременно.  Можно сложить число маршрутов, проходящих через В и не проходящих через З, с числом маршрутов, проходящих через З и не проходящих через В. Можно также найти число маршрутов, проходящих дибо через В, либо через З, либо через В и З, а потом вычесть из него число маршрутов, проходящих как через В, так и через З.

Ограничения на длину маршрута

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

Так, вопрос может быть таким: «Сколько существует маршрутов из А в М, проходящих ровно через семь городов, считая А и М?»

Доработаем нашу функцию ways с тем, чтобы она хранила текущий маршрут. Дополним её новым параметром trassa, в котором будем хранить маршрут. Когда мы достигнем города назначения, то проверим длину маршрута. Если она такая, какая требуется, то мы засчитываем рашение (возвращаем 1), в противном случае — нет (возвращаем 0). 

Вот полная программа, решающая эту задачу:

def ways(start,end,karta,zapret,trassa):
    trassa=trassa+start
    if start in zapret: return 0
    if start==end:
        if len(trassa)==7: return 1
        else: return 0
    r=0
    for i in range(len(karta[start])): r += ways(karta[start][i],end,karta,zapret,trassa)
    return r

a={}
f=open(‘in.txt’)
for s in f:
    s=s.strip()
    if len(s)>0: a[s[0]]=s[1:]

print(ways(‘А’,’М’,a,»,»))

Так как нам требовалась только длина маршрута, то можно было бы обойтись не строкой, а целой переменной. Но строка, хранящая маршрут, дает большую гибкость: можно, анализировать эту строку и, например, принимать только те маршруты, которые проходят по участку В-Ж. (if ‘ВЖ’ in trassa).

Самый длинный или самый короткий путь

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

Решим задачу нахождения длины самого длинного и самого короткого пути:

def ways(start,end,karta,zapret,trassa):
    global l,L
    trassa=trassa+start
    if start in zapret: return 0
    if start==end:
        if len(trassa)>L: L=len(trassa)
        if len(trassa)<l: l=len(trassa)
        return 1
    r=0
    for i in range(len(karta[start])): r += ways(karta[start][i],end,karta,zapret,trassa)
    return r

a={}
l=1000
L=0
f=open(‘in.txt’)
for s in f:
    s=s.strip()
    if len(s)>0: a[s[0]]=s[1:]

print(ways(‘А’,’М’,a,»,»))
print(l,L)

Команда global l,L в функции ways дает доступ к внешним переменным l и L, в которых вычисляется минимальная и blog/loadingмаксимальная длина пути.

Нужно обращать внимание на формулировку вопроса в задачах о длине пути. Данная программа вычисляет число городов, через который проходит путь, включая начальный и конечный города. Если же требуется найти число дорог, по которым надо проехать, то оно, очевидно, на единицу меньше числа городов. Так, данная программа дает ответ, что самый короткий путь содержит 6 городов, а самый длинный — 9. Соответственно, минимальное число дорог — это 5, а максимальное — 8.

Стоит ли овчинка выделки?

У дочитавших до этого места может возникнуть вопрос: а нужно ли всё это? Ведь такие задачи можно решать на листке бумаги. Автор не берется ответить на этот вопрос. Попробуйте найти ответ сами. Решите одну и ту же задачу вручную и на компьютере — и определите, какой способ будет для вас проще и быстрее. Удачи вам!

(c) Ю.Д.Красильников, 2022 г

На уроке рассматривается решение 13 задания ЕГЭ по информатике

Содержание:

  • Объяснение заданий 13 ЕГЭ по информатике
    • Графы. Поиск количества путей
  • Решение заданий 13 ЕГЭ по информатике

13-е задание: «Информационные модели»

Уровень сложности

— повышенный,

Требуется использование специализированного программного обеспечения

— нет,

Максимальный балл

— 1,

Примерное время выполнения

— 3 минуты.

  
Проверяемые элементы содержания: Умение представлять и считывать данные в разных типах информационных моделей (схемы, карты, таблицы, графики и формулы)

До ЕГЭ 2021 года — это было задание № 15 и № _ ЕГЭ

Типичные ошибки и рекомендации по их предотвращению:

«Игнорирование указаний в условии задания, что путь должен включать (или не включать) заданные промежуточные вершины»

ФГБНУ «Федеральный институт педагогических измерений»

Графы. Поиск количества путей

  • Если в город R из города A можно добраться только из городов X, Y и Z, то количество различных путей из города A в город R равно сумме числа различных путей проезда из A в X, из A в Y и из A в Z, то есть:
  • NR = NX + NY + NZ

  • где NR — это количество путей из вершины A в вершину R
  • Число путей не бесконечно, исключением является только граф, в котором есть циклы – замкнутые пути.
  • Часто задачи с графами целесообразней решать с конца.

Решение заданий 13 ЕГЭ по информатике

Плейлист видеоразборов задания на YouTube:

Задание демонстрационного варианта 2022 года ФИПИ


13_1:

На рисунке — схема дорог, связывающих города А, Б, В, Г, Д, Е, Ж, И, К, М. По каждой дороге можно двигаться только в одном направлении, указанном стрелкой.

Сколько существует различных путей, ведущих из города А в город М и проходящих через город Г?
разбор 13 задания егэ информатика

✍ Решение:

  • Удалим ребра, которые проходят «мимо» вершины Г или до которых от пункта А можно дойти, минуя вершину Г:
  • 1_1

  • Вершина В удалена, т.к. возможны только следующие траектории движения через этот пункт (которые НЕ проходят через пункт Г):
  • 1. А — Б — В — И — М
  • 2. А — Б — В — Е — И — М
  • 3. А — Б — В — Е — М
  • 4. А — Б — В — Е — К — М
  • Теперь посчитаем результаты по оставшимся вершинам:
М = И + Е + К 
-----
 И = Е 
   Е = Г + Ж 
    Г = Б + А + Д = 1 + 1 + 1 = 3 
    Ж = Г = 3
 К = Е + Ж

Теперь возвращаемся, подставляя найденные значения: ↑
   Е = Г + Ж = 3 + 3 = 6 
    Ж = Г = 3
 И = Е = 6 (получили из последующих шагов)
 К = Е + Ж = 6 + 3 = 9       
М = И + Е + К = 6 + 6 + 9 = 21  

Результат: 21

Видео ЕГЭ по информатике (аналитическое решение):

📹 YouTube здесь
📹 Видеорешение на RuTube здесь

13_2:

На рисунке — схема дорог, связывающих города А, Б, В, Г, Д, Е, Ж, И, К, М. По каждой дороге можно двигаться только в одном направлении, указанном стрелкой.

Сколько существует различных путей, ведущих из города А в город М и не проходящих через город Г?
решение ЕГЭ по информатике 2017 задание 15

✍ Решение:

  • Удалим ребра, которые проходят через вершину Г:
  • решение 13 задания егэ

  • Теперь посчитаем результаты по оставшимся вершинам:
М = И + Е + К
-----
И = В + Е
  В = 1
  Е = В + Ж
     Ж = 1

Теперь возвращаемся, подставляя найденные значения: ↑
  Е = В + Ж = 1 + 1 = 2
И = В + Е = 1 + 2 = 3 
К = Е = 2 
М = И + Е + К = 3 + 2 + 2 = 7  

Результат: 7

Подробное решение данного 13 задания в видеоуроке:

📹 YouTube здесь
📹 Видеорешение на RuTube здесь

13 задание. Демоверсия ЕГЭ 2018 информатика:

На рисунке представлена схема дорог, связывающих города А, Б, В, Г, Д, Е, Ж, З, И, К, Л, М.
По каждой дороге можно двигаться только в одном направлении, указанном стрелкой.

Сколько существует различных путей из города А в город М, проходящих через город Ж?
демоверсия егэ информатика 2018 решение 13 (15) задания

✍ Решение:

Результат: 20

Подробное решение 13 задания демоверсии ЕГЭ 2018 года смотрите на видео:

📹 YouTube здесь
📹 Видеорешение на RuTube здесь


13_4:

На рисунке представлена схема дорог, связывающих города А, Б, В, Г, Д, Е, Ж, З, И, К, Л, М. По каждой дороге можно двигаться только в одном направлении, указанном стрелкой.
Какова длина самого длинного пути из города А в город М?
Длиной пути считать количество дорог, составляющих этот путь.

✍ Решение:


Характеристика задания

1. Тип ответа: числовой.

2. Структура содержания задания: дана текстовая задача и схема к ней, нужно определить количество путей из начальной точки до конечной по схеме.

3. Уровень сложности: повышенный.

4. Примерное время выполнения: (3) минуты.

5. Количество баллов: (1).

6. Требуется специальное программное обеспечение: нет.

7. Задание проверяет умение представлять и считывать данные в разных типах информационных моделей.

Основной способ решения задания разобран в предыдущей теории. С (2022) года появилось задание, которое вызвало затруднение на экзамене, хотя способ решения остался тот же: нужно подсчитать количество путей, но ограничения другие. Разберём это задание.

ЕГЭ-(2022). На рисунке представлена схема дорог, связывающих города А, Б, В, Г, Д, Е, Ж, З, И, К. По каждой дороге можно двигаться только в одном направлении, указанном стрелкой. Определи количество различных путей ненулевой длины, которые начинаются и заканчиваются в городе Е, не содержат этот город в качестве промежуточного пункта и проходят через промежуточные города не более одного раза.

20222.jpg

Рис. (1). Схема к заданию (2022)

Решение: из точки Е ведут только три дороги: в сторону В, И и К.

1.jpg

Рис. (2). Варианты движения

Рассмотрим их в отдельности.

Направление ЕВ.

2.jpg

Рис. (3). Количества маршрутов в направлении ЕВ

В (=) Е (= 1),

А (=) В (=1),

Г (=) А (+) В (=2),

Б (=) А (=1),

Д (=) Б (+) В (=2+1=3),

З (=) Д (=3),

К (=) Д (+) З (=3+3=6),

И (=) К (=6),

Ж (=) Г (+) И (+) В (=2+6+1=9),

Е (=) Ж (+) Д (=12).

Итого (12) маршрутов.

Теперь рассмотрим направление ЕК.

20222.jpg

Рис. (4). Количества маршрутов в направлении ЕК

Е (=1),

К (=) Е (=1),

И (=) К (=1),

Ж (=) И (=1),

Е (=) Ж (=1).

Всего (1) маршрут.

Также в направлении ЕИ — тоже (1) маршрут.

Складываем (12+1+1=14).

Ответ: (14).

В Демоверсии (2023) года вариант аналогичный.

Рассмотрим ещё один тип заданий.

На рисунке представлена схема дорог, связывающих города А, Б, В, Г, Д, Е, Ж, З, И, К, Л, М. По каждой дороге можно двигаться только в одном направлении, указанном стрелкой. Какова длина самого длинного пути из города А в город М?

Длиной пути считать количество дорог, составляющих этот путь.

1.jpg

Рис. (5). Схема к заданию

Можно сказать, что вес каждого ребра равен единице, и поэтому, проходя по ребру, мы добавляем к предыдущему значению (1).

Начало отсчёта — в точке А, окончание пути — в точке М.

Просчитаем маршруты от точки А до Ж.

Помним, что маршрут должен быть максимальный, поэтому рассмотрим варианты:

в вершину В можно прийти:

А—В (=1),

А—Б—В (=2),

А—Г—В (=2),

А—Д—Г—В (=3).

Выберем А—Д—Г—В.

В вершину Е:

А—Д—Г—В—Е (=4), с учётом предыдущего выбора, все остальные пути короче.

Поэтому в вершину Ж будет путь А—Д—Г—В—Е—Ж(=5), самый длинный.

И (=5)(Ж) (+) (1=6),

К (=6)(И) (+) (1=7),

М (=7)(К) (+) (1=8).

Ответ: (8).

Источники:

Рис. 1. Схема к заданию 2022. © ЯКласс.

Рис. 2. Варианты движения. © ЯКласс.

Рис. 3. Количества маршрутов в направлении ЕВ. © ЯКласс.

Рис. 4. Количества маршрутов в направлении ЕК. © ЯКласс.

Рис. 5. Схема к заданию. © ЯКласс.

ЕГЭ-2015 задание 15.

Поиск количества путей в графе

Теория

Если в город S можно приехать только из городов X, Y, и Z, то число различных путей из города A в город S равно сумме числа различных путей проезда из A в X, из A в Y и из A в Z, то есть

NS = NX + NY + NZ ,

где NM обозначает число путей из вершины A в некоторую вершину M

Число путей конечно, если в графе нет циклов — замкнутых путей

Задача

На рисунке – схема дорог, связывающих города А, Б, В, Г, Д, Е, Ж, И, К, Л. По каждой дороге можно двигаться только в одном направлении, указанном стрелкой. Сколько существует различных путей из города А в город Л?

Поиск путей в графе

Решение

Будем обозначать через NX количество различных путей из города А в город X. Для города А есть только один маршрут – никуда не двигаться, поэтому NA = 1. Для любого города X количество маршрутов NX можно вычислить как

NX = NY + … + NZ

где сумма взята по всем вершинам, из которых есть прямой путь в вершину X; например, 

NЛ = NД + NИ + NЖ + NК

Составим таблицу, в которой около каждого города будем записывать количество прямых путей в этот город. Начнем считать количество путей с начала маршрута – с города А: 

В пункты Б и В ведут единственные дороги из А. В пункт В можно попасть из пунктов А, Б, и Г, т.е. NВ = NА + NБ + NГ = 3.

А Б В Г Д Е Ж И К Л
1 1 3 1            

В пункт Е можно попасть только из Г, количество путей равно количеству путей в пункт Г. В пункт Ж ведут прямые пути из пунктов Е и В, т.е. NЖ = NВ + NЕ = 4. В пункт Д ведут прямые пути из пунктов Б и В, т.е. NД = NВ + NБ = 4.

А Б В Г Д Е Ж И К Л
1 1 3 1 4 1 4      

В пункт И можно попасть только из Д, количество путей равно количеству путей в пункт Д = 4. В пункт К ведет путь только из пункта Е, т.е. NК = NЕ = 1. В пункт Л ведут прямые пути из пунктов Д, И, Ж и К, т.е. NЛ = NД + NИ + NЖ + NК = 13.

А Б В Г Д Е Ж И К Л
1 1 3 1 4 1 4 4 1 13

Ответ

13

Подробности

Опубликовано: 29 Апрель 2015
Просмотров: 14902

Get it on Apple Store

Get it on Google Play

Public user contributions licensed under
cc-wiki license with attribution required

Skolkovo resident

Понравилась статья? Поделить с друзьями:
  • Егэ информатика подготовка разбор заданий с нуля
  • Егэ информатика питон шпаргалка
  • Егэ информатика пересдача
  • Егэ информатика перевод баллов в стобальную
  • Егэ информатика оценивание заданий по баллам