Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
3 - Графы / Лекция 18 Маршруты достижимость связность.doc
Скачиваний:
128
Добавлен:
09.04.2015
Размер:
230.4 Кб
Скачать

19.2.7 Вопросы для контроля к п. 19.2.6

  1. Как определить – есть ли в графе маршруты длины k? Сколько таких маршрутов в графе? Какие они?

  2. Как определить – есть ли в графе цикла длины k? Сколько таких циклов в графе? Какие они?

  3. Как определить – есть ли в графе маршруты длины kс началом в заданной вершине? Сколько таких маршрутов в графе? Какие они?

  4. Как определить – есть ли в графе циклы длины kс началом в заданной вершине? Сколько таких циклов в графе? Какие они?

  5. Чем отличаются операции над графами п. 4.3 от аналогичных операций над логическими переменными и почему?

19.2.8 Кратчайший маршрут во взвешенном связном графе

Предварительное замечание.

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

В неорграфе можно исключить висячие вершины.

Рисунок 19.14

1. Волновой алгоритм

Вариант 1:

Вес ребра – 1 (нет ребра – 0).

s– начало маршрута,

t – конец маршрута.

Ищем маршрут между sиt.

Прямая фаза

Сначала все вершины не имеют меток.

  1. Положим i= 0, присвоим вершинеsвесw(s) =i (т.е.w(s) = 0) .

  2. Находим все не помеченные вершины, связанные ребром с вершиной (вершинами) с меткой i.

  3. Если такие вершины есть, то помечаем их метками i = i + 1. Если вершинаtпомечена, то к п. 4. Если – нет, то к п. 2. Если таких вершин нет, а вершина t не помечена, тоtнедостижима изs. СТОП.

  4. Длина кратчайшего маршрута от sкtравнаw(t). СТОП.

Обратная фаза (начинается с конца)

Принадлежность вершин кратчайшему маршруту определяется из условий:

Конечная вершина vk = t.

Для vk–1должно выполняться условиеw(t)w(vk–1) = 1.

Для vk2 w(vk1)w(vk–2) = 1

и т.д. пока не придем в вершину s.

Пример.На рис. 19.15 показан граф с разметкой вершин.

Маршрут найдите самостоятельно.

Рисунок 19.15

Длина маршрута (s,t) равна 3.

Вариант 2:

Каждое ребро имеет вес ij– число, если ребро есть, или, если ребра нет. Петля имеет весii= 0.

Ищем кратчайший маршрут между вершинами v1иvk.

Прямая фаза

  1. Пометить вершины с номерами 1…nметками1= 0,i=,i= ,n– число вершин. Метки вершинv2,…,vnсчитаем временными.

  2. Рассматриваем v1. У вершин, смежных сv1, временные метки меняем по следующему правилу:

– если i–11,i (1,i – длина ребра, соединяющего вершинуv1с вершинойvi), то заменяемiнаi=1+1,i

  • если i–11,i, тоiне изменяем.

Присвоенные метки вершин считаем временными.

  1. Среди вершин с временными метками выбираем вершину viс минимальным значением меткиi. Метку этой вершины делаем постоянной.

  2. Рассматриваем вершины vj, смежные сvi, и изменяем меткиvj:

– если λj– λί>ij, то λj= λί+ij,

– если λj – λίij, то не меняем.

  1. Если метка конечной вершины vk– постоянная, то к пункту 6, если нет, то к пункту 3.

Обратная фаза

  1. Строим маршрут, начиная с 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