
- •19 Лекция № 18. Маршруты, достижимость, связность
- •19.1 Ключевые вопросы
- •19.2 Текст лекции
- •19.2.1 Маршруты, связность, достижимость
- •19.2.2 Вопросы для контроля к п. 19.2.1
- •19.2.3 Метрические характеристики графа
- •19.2.4 Обхват и окружение графа
- •19.2.7 Вопросы для контроля к п. 19.2.6
- •19.2.8 Кратчайший маршрут во взвешенном связном графе
- •1. Волновой алгоритм
- •19.2.9Вопросы для контроля к п. 19.2.8
19.2.7 Вопросы для контроля к п. 19.2.6
Как определить – есть ли в графе маршруты длины k? Сколько таких маршрутов в графе? Какие они?
Как определить – есть ли в графе цикла длины k? Сколько таких циклов в графе? Какие они?
Как определить – есть ли в графе маршруты длины kс началом в заданной вершине? Сколько таких маршрутов в графе? Какие они?
Как определить – есть ли в графе циклы длины kс началом в заданной вершине? Сколько таких циклов в графе? Какие они?
Чем отличаются операции над графами п. 4.3 от аналогичных операций над логическими переменными и почему?
19.2.8 Кратчайший маршрут во взвешенном связном графе
Предварительное замечание.
Если имеем орграф, то можно удалить вершины источники и стоки, не являющиеся началом и концом искомого маршрута, и так как кратчайший путь не проходит дважды ни через дугу, ни через вершину, то дуги, входящие в вершину начала пути и выходящие из конца пути, можно также исключить (см. рис. 19.14). После их исключения могут образоваться вершины источники, изолированные и тупиковые вершины, и даже компоненты связности, не содержащие вершин начала и конца маршрута. Их также следует исключить.
В неорграфе можно исключить висячие вершины.
Рисунок
19.14
1. Волновой алгоритм
Вариант 1:
Вес ребра – 1 (нет ребра – 0).
s– начало маршрута,
t – конец маршрута.
Ищем маршрут между sиt.
Прямая фаза
Сначала все вершины не имеют меток.
Положим i= 0, присвоим вершинеsвесw(s) =i (т.е.w(s) = 0) .
Находим все не помеченные вершины, связанные ребром с вершиной (вершинами) с меткой i.
Если такие вершины есть, то помечаем их метками i = i + 1. Если вершинаtпомечена, то к п. 4. Если – нет, то к п. 2. Если таких вершин нет, а вершина t не помечена, тоtнедостижима изs. СТОП.
Длина кратчайшего маршрута от sкtравнаw(t). СТОП.
Обратная фаза (начинается с конца)
Принадлежность вершин кратчайшему маршруту определяется из условий:
Конечная вершина vk = t.
Для vk–1должно выполняться условиеw(t)– w(vk–1) = 1.
Для vk–2 w(vk–1)– w(vk–2) = 1
и т.д. пока не придем в вершину s.
Пример.На рис. 19.15 показан граф с разметкой вершин.
Маршрут найдите самостоятельно.
Рисунок
19.15
Длина маршрута (s,t) равна 3.
Вариант 2:
Каждое ребро имеет вес ℓij– число, если ребро есть, или, если ребра нет. Петля имеет весℓii= 0.
Ищем кратчайший маршрут между вершинами v1иvk.
Прямая фаза
Пометить вершины с номерами 1…nметками1= 0,i=,i=
,n– число вершин. Метки вершинv2,…,vnсчитаем временными.
Рассматриваем v1. У вершин, смежных сv1, временные метки меняем по следующему правилу:
– если i–1ℓ1,i (ℓ1,i – длина ребра, соединяющего вершинуv1с вершинойvi), то заменяемiнаi=1+ℓ1,i
если i–1ℓ1,i, тоiне изменяем.
Присвоенные метки вершин считаем временными.
Среди вершин с временными метками выбираем вершину viс минимальным значением меткиi. Метку этой вершины делаем постоянной.
Рассматриваем вершины vj, смежные сvi, и изменяем меткиvj:
– если λj– λί>ℓij, то λj= λί+ℓij,
– если λj – λίℓij, то не меняем.
Если метка конечной вершины vk– постоянная, то к пункту 6, если нет, то к пункту 3.
Обратная фаза
Строим маршрут, начиная с vk. λk– длина маршрута.
Принадлежность вершины vk–1маршруту определяется равенством
λk–k–1=ℓk, k–1
Вершина vk–2 должна удовлетворять условию
k–1–k–2 =ℓk–1, k–2и т.д. идем до вершиныv1.
Алгоритм пригоден как для неорграфов, так и для орграфов, и для весов (расстояний) отрицательных, но таких, чтобы не было в графе циклов с отрицательным весом. Отрицательный цикл может сделать длину маршрута как угодно малой.
Пример.Дан граф с весами ребер, показанными на рис. 19.16.
Найдите кратчайший маршрут (1,4) самостоятельно.
Ответ: 1,5,3,4; ℓ1,4= 2.
Рисунок
19.16