Курсовая работа: Алгоритмы на графах. Нахождение кратчайшего пути

Годом возникновения теории графов единодушно считается год 1736, когда Леонард Эйлер опубликовал решение так называемой задачи о Кенигсбергских мостах, а также нашел общий критерий существования Эйлерового цикла в графе.


Дата добавления на сайт: 04 марта 2025

Тема
Алгоритмы на графах. Нахождение кратчайшего пути

ВСТУПЛЕНИЕ

Годом возникновения теории графов единодушно считается год 1736, когда Леонард Эйлер опубликовал решение так называемой задачи о Кенигсбергских мостах, а также нашел общий критерий существования Эйлерового цикла в графе.
Получение дальнейших существенных результатов в этой области датируются серединой ХIХ века.
Однако начало проведения активных систематических исследований и становления теории графов как отдельного авторитетного раздела современной математики произошло еще почти 100 лет назад, то есть в середине ХХ века. Именно с этого времени граф становится одной из самых распространенных и популярных математических моделей во многих сферах науки и техники. Картинка в виде набора точек на плоскости и линий, проведенных между некоторыми из них, стала удобной и наглядной форме изображения самых разнообразных объектов, процессов и явлений.
Во многом это связано с возникновением, бурным развитием и распространением электронных вычислительных машин и, как следствие, значительным возрастанием роли задач дискретного характера. Математика от "обслуживания" преимущественно физики переходит к проникновению своих методов в другие сферы человеческой деятельности.
Одним из мощных инструментов такого проникновения является граф. С чисто формальной точки зрения граф можно рассматривать как один из разновидностей алгебраической системы (а именно, как модель), а следовательно, и всю теорию графов как раздел современной алгебры. Действительно, результаты и методы алгебры широко используются в теории графов. Однако за последние полвека активного, интенсивного и экстенсивного развития теория графов выработала свою достаточно специфическую собственную проблематику и методологию.
Одну из задач, которую можно решить с помощью графа является задача нахождения кратчайших расстояний между обьектами.
Нахождение кратчайшего пути - жизненно необходимо и используется практически везде, начиная от нахождения оптимального маршрута между двумя объектами на местности (напр. кратчайший путь от дома до академии), также используется в системах автопилота, используется для нахождения оптимального маршрута при перевозках коммутации информационного пакета Internet и мн. др.
Наиболее распространенные методы поиска кратчайших расстояний - это использование алгоритма Дейкстры (для нахождения кратчайшего пути между двумя вершинами), алгоритма Флойда (для нахождения кратчайших путей между всеми парами вершин) и алгоритма Йена (для нахождения k - кратчайших путей в графе).
Целью курсовой работы было изучить и реализовать на практике алгоритм Дейкстры и Флойда для нахождения кратчайших путей в графе. Задачи работы:
. Исследовать свойства эйлеровых и гамильтоновых цепей и циклов в теории графов.
. Изучение алгоритма Дейкстры и Флойда для нахождения кратчайших путей в графе.
. Приведение примеров решения задач этими методами.
Для графов с конечным множеством вершин и ребер, как правило, проблема существования алгоритма решения задач, в том числе экстремальных, решается положительно. Решение многих задач, связанных с конечными графами, может быть выполнено с помощью полного перебора всех допустимых вариантов. Однако таким способом удается решить задачу только для графов с небольшим числом вершин и ребер. Поэтому существенное значение для графов имеет построение эффективных алгоритмов, находящих точное или приближенное решение.
Раздел I. ВВЕДЕНИЕ В ТЕОРИЮ ГРАФОВ

1.1 Основные понятия и определения

Основные элементы геометрических фигур, применяемых в теории графов приведены на рис.1. и состоят из вершин графа, ребер графа и дуг графа.
Сочетание этих элементов определяет понятия: неориентированный граф, ориентированный граф и смешаныйный граф [6].

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 1)
Рис.1.1 Основные элементы графа (вершина, ребро, дуга)

Неориентированный граф (неограф) - это граф (рис.1.2), для каждого ребра которого несущественен порядок двух его конечных вершин.

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 2)
Рис.1.2 Неориентированный граф (вершины и ребра)

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

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 3)
Рис. 1.3 Ориентированный граф

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 4)
Рис. 1.4 Смешаныйый граф

Смешаныйый граф (рис.1.4) - это граф, который содержит как ориентированные, так и неориентируемые ребра. Каждой из перечисленных видов графа может содержать одно или несколько ребер, в которых оба конца сходятся в одной вершине, такие ребра называются петлями (рис.1.5).
гамильтоновый головоломка цепь число
Алгоритмы на графах. Нахождение кратчайшего пути (рис. 5)
Рис. 1.5 Смешаный граф с петлями

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 6)
Рис. 1.6 Общий случай графа

В общем случае множество ребер может состоять из трех непересекающихся подмножеств: подмножества звеньев, подмножества дуг и подмножества петель (рис.1.6).

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 7)
Рис.1.7 Сущность геометрической конфигурации графа

Наглядно граф можно представлять как геометрическую конфигурацию (см. рис.1.7), которая состоит из точек (вершин графа 1,2,3,4,5,6) и ребер (линий или отрезков № 1 (1-3), № 2 (3-4), № 3 (4-5), № 4 (3-5), № 5 (2-3), № 6 (2-5), № 7 (5-6), № 8 (6 -2), № 9 (2-1), которые соединяют некоторые точки (вершины) по выбранному алгоритму обхода вершин графа) [5].
Дадим формальное математическое определение графа. Пусть Алгоритмы на графах. Нахождение кратчайшего пути (рис. 8)-некоторая конечное множество (множество вершин), Алгоритмы на графах. Нахождение кратчайшего пути (рис. 9) - множество всех неупорядоченных пар элементов (ребер или дуг графа) из множества вершин

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 10), Алгоритмы на графах. Нахождение кратчайшего пути (рис. 11)

Определение 1.1.
Граф Алгоритмы на графах. Нахождение кратчайшего пути (рис. 12)- пара множеств Алгоритмы на графах. Нахождение кратчайшего пути (рис. 13). Множество Алгоритмы на графах. Нахождение кратчайшего пути (рис. 14)-это множество вершин, множество Алгоритмы на графах. Нахождение кратчайшего пути (рис. 15)-это множество ребер. Если Алгоритмы на графах. Нахождение кратчайшего пути (рис. 16), то мы говорим, что ребро Алгоритмы на графах. Нахождение кратчайшего пути (рис. 17) соединяет вершину Алгоритмы на графах. Нахождение кратчайшего пути (рис. 18) с вершиной Алгоритмы на графах. Нахождение кратчайшего пути (рис. 19), остальная терминология - ребро Алгоритмы на графах. Нахождение кратчайшего пути (рис. 20) и вершины Алгоритмы на графах. Нахождение кратчайшего пути (рис. 21) и Алгоритмы на графах. Нахождение кратчайшего пути (рис. 22)- инцидентны.
Определение 1.2.
Граф Алгоритмы на графах. Нахождение кратчайшего пути (рис. 23)называется полным, если Алгоритмы на графах. Нахождение кратчайшего пути (рис. 24), то есть граф состоит из максимально возможного количества ребер, которые попарно соединяющих точки Алгоритмы на графах. Нахождение кратчайшего пути (рис. 25) его вершин (см. рис.1.8). Если множество Алгоритмы на графах. Нахождение кратчайшего пути (рис. 26) содержит Алгоритмы на графах. Нахождение кратчайшего пути (рис. 27) вершин, то, очевидно, число ребер полного графа равна Алгоритмы на графах. Нахождение кратчайшего пути (рис. 28).

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 29)
Рис.1.8 Примеры полных графов

Определение 1.3.
Граф называется пустым, если граф не имеет ребра (см.рис.1.9).

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 30)
Рис.1.9 Пример построения 3-х вершинного графа с разным количеством ребер

Естественно возникает вопрос: сколько существует разных графов с множественным числом вершин Алгоритмы на графах. Нахождение кратчайшего пути (рис. 31), если Алгоритмы на графах. Нахождение кратчайшего пути (рис. 32). Для этого докажем следующую теорему.
Теорема 1.1. Число всех разных графов с вершинами равняется :

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 33)

Доказательство. Действительно, граф полностью определён, если указано множество Алгоритмы на графах. Нахождение кратчайшего пути (рис. 34), является подмножеством Алгоритмы на графах. Нахождение кратчайшего пути (рис. 35). Множество Алгоритмы на графах. Нахождение кратчайшего пути (рис. 36) содержит Алгоритмы на графах. Нахождение кратчайшего пути (рис. 37) элементов, поэтому число всех ее подмножеств равно Алгоритмы на графах. Нахождение кратчайшего пути (рис. 38).
Определение 1.4.
Вершины Алгоритмы на графах. Нахождение кратчайшего пути (рис. 39) та Алгоритмы на графах. Нахождение кратчайшего пути (рис. 40) графа Алгоритмы на графах. Нахождение кратчайшего пути (рис. 41) инцидентны, если Алгоритмы на графах. Нахождение кратчайшего пути (рис. 42).
Определение 1.5.
Степенью Алгоритмы на графах. Нахождение кратчайшего пути (рис. 43) вершины Алгоритмы на графах. Нахождение кратчайшего пути (рис. 44) графа Алгоритмы на графах. Нахождение кратчайшего пути (рис. 45) называется число вершин Алгоритмы на графах. Нахождение кратчайшего пути (рис. 46), какие инцидентные вершине Алгоритмы на графах. Нахождение кратчайшего пути (рис. 47)( число отрезков которые выходят из вершины Алгоритмы на графах. Нахождение кратчайшего пути (рис. 48) ) - см.рис.1.10.

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 49)
Рис.1.10 Определение степеней вершин графа по количеству ребер, исходящих из вершин

Определение 1.6.
Если Алгоритмы на графах. Нахождение кратчайшего пути (рис. 50), то вершина Алгоритмы на графах. Нахождение кратчайшего пути (рис. 51) называется конечной вершиной графа Алгоритмы на графах. Нахождение кратчайшего пути (рис. 52). Если Алгоритмы на графах. Нахождение кратчайшего пути (рис. 53), то вершины Алгоритмы на графах. Нахождение кратчайшего пути (рис. 54) называется изолированной(см. рис. 1.11)

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 55)
Рис.1.11 Определение конечных и изолированных вершин графа

.2 Лемма о рукожатии

Формулировка этой леммы простая - „количество рук, которые принимают участие в рукожатии N-пар людей, равняется 2*N”. Лемму можно представить в форме графа, где N вершин соединены ребрами d(хі,xj) рукожатия i и j - вершин (см. рис.1.12), выполнив следующее доказательство.

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 56)
Рис.1.12. „Лемма о рукожатии” 5 лиц

Пусть Алгоритмы на графах. Нахождение кратчайшего пути (рис. 57) граф с множественным числом верщин Алгоритмы на графах. Нахождение кратчайшего пути (рис. 58). Тогда

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 59) (1.1)

Доказательство. Заметим, что каждое ребро графа в сумме Алгоритмы на графах. Нахождение кратчайшего пути (рис. 60) учитывается дважды (см. рис.1.12), и поэтому справедливо равенство (1.1). Заметим, что сумма степеней всех вершин в графе (или мультиграф без петель) должно быть чётным. Это следует из того, что если взять вершины, вообще не связаны друг с другом, то сумма степеней этих вершин равна нулю. Добавляя любое ребро, связывает две вершины, увеличиваем сумму всех степеней на 2 единицы. Таким образом, сумма всех степеней вершин парная. Из равенства 1.1 следует такое утверждение: число вершин нечетной степени в графе Алгоритмы на графах. Нахождение кратчайшего пути (рис. 61)обязательно является четным числом. Теорема доказана.
Определение 1.7.
Матрица смежности Алгоритмы на графах. Нахождение кратчайшего пути (рис. 62)- это симметричная матрица, элементы которой равны нулю или единице (диагональные элементы равны нулю) и такая, что сумма чисел в любой строке и любом столбце равна степени соответствующей вершины. Так, для графа, приведенного на рис.1.13, матрица смежности построится в виде:

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 63)
Рис.1.13. К построению матрицы смежности 3-х вершинного графа

Определение 1.8.
Последовательность ребер Алгоритмы на графах. Нахождение кратчайшего пути (рис. 64), в которой соседние ребра инцидентны одной и той же вершине называются цепью. Цепь называется простой, если все вершины, принадлежащие ей (кроме, возможно, первой и последней), различны; число в этом случае называют длиной цепи.
Если Алгоритмы на графах. Нахождение кратчайшего пути (рис. 65), то цепь называется циклом. Цикл, в котором все вершины различны, называется простым. Примеры простых цепей и простых циклов приведены на рис.1.14:
(1,3), (3,4), (4,6) - простая цепь;
(1,2), (2,5), (5,6) - простая цепь;
(1,3), (3,4), (4,6), (6,5), (5,2) (2,1) - простой цикл.

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 66)
Рис 1.14. Пример графа с простыми цепями и простыми циклами

Определение 1.9.
Граф Алгоритмы на графах. Нахождение кратчайшего пути (рис. 67) является подграфом графа Алгоритмы на графах. Нахождение кратчайшего пути (рис. 68), если Алгоритмы на графах. Нахождение кратчайшего пути (рис. 69). Если Алгоритмы на графах. Нахождение кратчайшего пути (рис. 70), то подграф Алгоритмы на графах. Нахождение кратчайшего пути (рис. 71) называется остовним подграфом.
Определение 1.10.
Граф Алгоритмы на графах. Нахождение кратчайшего пути (рис. 72) является суммой графов Алгоритмы на графах. Нахождение кратчайшего пути (рис. 73), если

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 74)

эта сумма называется прямой, если Алгоритмы на графах. Нахождение кратчайшего пути (рис. 75), Алгоритмы на графах. Нахождение кратчайшего пути (рис. 76).

1.3 Оценки для числа ребер с Алгоритмы на графах. Нахождение кратчайшего пути (рис. 77) компонентами связанности

Определение 1.11.
Граф Алгоритмы на графах. Нахождение кратчайшего пути (рис. 78) называется связанным, если любые вершины Алгоритмы на графах. Нахождение кратчайшего пути (рис. 79) и Алгоритмы на графах. Нахождение кратчайшего пути (рис. 80)Алгоритмы на графах. Нахождение кратчайшего пути (рис. 81) соединенные цепью с началом в Алгоритмы на графах. Нахождение кратчайшего пути (рис. 82) и концом в Алгоритмы на графах. Нахождение кратчайшего пути (рис. 83). Из симметрии следует, что в этом случае и вершина Алгоритмы на графах. Нахождение кратчайшего пути (рис. 84) соединена с вершиной Алгоритмы на графах. Нахождение кратчайшего пути (рис. 85).
Теорема 1.2.
Каждый граф является прямой суммой связных графов.
Доказательство. На множестве вершин Алгоритмы на графах. Нахождение кратчайшего пути (рис. 86) граф Алгоритмы на графах. Нахождение кратчайшего пути (рис. 87) определим отношение Алгоритмы на графах. Нахождение кратчайшего пути (рис. 88), если Алгоритмы на графах. Нахождение кратчайшего пути (рис. 89) сочетается с Алгоритмы на графах. Нахождение кратчайшего пути (рис. 90). Отношение Алгоритмы на графах. Нахождение кратчайшего пути (рис. 91) является отношением еквивалентности. Обозначим через Алгоритмы на графах. Нахождение кратчайшего пути (рис. 92). Тогда Алгоритмы на графах. Нахождение кратчайшего пути (рис. 93) и является разбиение Алгоритмы на графах. Нахождение кратчайшего пути (рис. 94) на классы эквивалентности. Графы Алгоритмы на графах. Нахождение кратчайшего пути (рис. 95) являются связанными графами и

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 96)(1.2)

является прямой суммой связных графов. Теорема доказана.
Эти графы называются компонентами связности.
Рассмотрим оценки для числа ребер с Алгоритмы на графах. Нахождение кратчайшего пути (рис. 97) компонентами связности.
Теорема 1.3.
Пусть Алгоритмы на графах. Нахождение кратчайшего пути (рис. 98) граф, который состоит из Алгоритмы на графах. Нахождение кратчайшего пути (рис. 99) вершин, Алгоритмы на графах. Нахождение кратчайшего пути (рис. 100) ребер и Алгоритмы на графах. Нахождение кратчайшего пути (рис. 101) компонент связанности. Тогда выполняются неравенства

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 102)(1.3)

Доказательство. Докажем сначала неравенство Алгоритмы на графах. Нахождение кратчайшего пути (рис. 103). Будем доказывать индукцией по числу ребер. Предположим, что неравенство справедливо для всех графов с числом ребер Алгоритмы на графах. Нахождение кратчайшего пути (рис. 104). Пусть Алгоритмы на графах. Нахождение кратчайшего пути (рис. 105) граф из Алгоритмы на графах. Нахождение кратчайшего пути (рис. 106) вершин, Алгоритмы на графах. Нахождение кратчайшего пути (рис. 107) ребер и Алгоритмы на графах. Нахождение кратчайшего пути (рис. 108) компонентами связности. Вычеркнем максимальное возможное число ребер так, чтобы не изменялось число компонент связности. Число ребер в полученном графе обозначим Алгоритмы на графах. Нахождение кратчайшего пути (рис. 109).
Рассмотрим для примера граф, изображенный на рисунке (1.15)
Алгоритмы на графах. Нахождение кратчайшего пути (рис. 110)
Рис. 1.15. Пример 1 графа для оценки связности

В нем Алгоритмы на графах. Нахождение кратчайшего пути (рис. 111) .Вычеркнув два ребра, получим граф Алгоритмы на графах. Нахождение кратчайшего пути (рис. 112). Вычеркнуть дальше какое-либо ребро, не нарушая связаности, уже нельзя (см. рис.1.16)

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 113)
Рис. 1.16. Пример 1 графа для оценки связности

Вернемся к графу, полученного из Алгоритмы на графах. Нахождение кратчайшего пути (рис. 114). Вычеркнув в нем еще одно ребро, мы получим граф с числом компонент связности на единицу больше. В силу индуктивного предположения, справедливого, ибо Алгоритмы на графах. Нахождение кратчайшего пути (рис. 115) имеем, Алгоритмы на графах. Нахождение кратчайшего пути (рис. 116), откуда Алгоритмы на графах. Нахождение кратчайшего пути (рис. 117).
Для доказательства верхней оценки в неравенстве (1.3) заменим каждую компоненту полным графом. Пусть Алгоритмы на графах. Нахождение кратчайшего пути (рис. 118) и Алгоритмы на графах. Нахождение кратчайшего пути (рис. 119) два полных, полученных из компонент связности Алгоритмы на графах. Нахождение кратчайшего пути (рис. 120) и Алгоритмы на графах. Нахождение кратчайшего пути (рис. 121), а Алгоритмы на графах. Нахождение кратчайшего пути (рис. 122) и Алгоритмы на графах. Нахождение кратчайшего пути (рис. 123) число ребер в этих компонентах. Заменим Алгоритмы на графах. Нахождение кратчайшего пути (рис. 124) на полный граф, добавив одну вершину, а Алгоритмы на графах. Нахождение кратчайшего пути (рис. 125)заменим на полный граф, отняв одну вершину. Тогда общее число вершины не изменится, а число ребер увеличится на положительную величину

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 126)
Следовательно, для того, чтобы число ребер в графе Алгоритмы на графах. Нахождение кратчайшего пути (рис. 127) было максимально возможным (при фиксированных Алгоритмы на графах. Нахождение кратчайшего пути (рис. 128) и Алгоритмы на графах. Нахождение кратчайшего пути (рис. 129) ), граф Алгоритмы на графах. Нахождение кратчайшего пути (рис. 130) должен состоять из Алгоритмы на графах. Нахождение кратчайшего пути (рис. 131) изолированных вершин и полного графа с Алгоритмы на графах. Нахождение кратчайшего пути (рис. 132) вершинами. Отсюда и следует неравенство (1.3). Теорема доказана.
Из неравенства (1.3) следует такое следствие.
Следствие. Любой граф из Алгоритмы на графах. Нахождение кратчайшего пути (рис. 133) и больше чем Алгоритмы на графах. Нахождение кратчайшего пути (рис. 134) ребрами является связным.
Действительно, если граф с Алгоритмы на графах. Нахождение кратчайшего пути (рис. 135) вершинами имеет два компонента связности, то максимальное число ребер не превышает Алгоритмы на графах. Нахождение кратчайшего пути (рис. 136) .
Найти компоненты сильной связности графа на рис.1.17.

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 137)

Ответы

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 138)
Рис.1.17. 7-ми вершинный граф для вычисления компонентов связности .
1.4 Ориентированы графы, графы, с петлями, графы с параллельными дугами

Дадим определение ориентированных графов, графов с петлями и графов с параллельними дугами.
Неформально, граф выглядит как диаграмма, есть множество точек плоскости (вершин или узлов), соединенных между собой линиями (ребрами). Диаграмма дает представление о связи между элементами (вершинами), но ничего не говорит о метрических свойствах (длина линий, их форма и т.д.).
В зависимости от типа ребер отличаются несколько типов графов. Петля - это ребро, соединяющий вершину саму с собой. В мультиграфе петли не допускаются, но пары вершин могут соединяться несколькими ребрами, которые называются кратными, или параллельными. В псевдографе допускаются петли и кратные ребра.
В обычном графе нет ни петель, ни кратных ребер.С помощью графов подаются структурные зависимости между элементами, соответствующий граф называется ориентированным, или орграфом, а его ориентированные ребра - дугами. Граф, который состоит из ориентированных и неориентированных ребёр одновременно, называется смешанным.

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 139)
Рис.1.18. Виды ориентированных графов

Определение 1.12.
Пусть Алгоритмы на графах. Нахождение кратчайшего пути (рис. 140) множественное число вершин, Алгоритмы на графах. Нахождение кратчайшего пути (рис. 141)- множественное число упорядоченных пар элементов с Алгоритмы на графах. Нахождение кратчайшего пути (рис. 142) ( будем называть их дугами). Орієнтованим графом Алгоритмы на графах. Нахождение кратчайшего пути (рис. 143) будем называть пару множеств Алгоритмы на графах. Нахождение кратчайшего пути (рис. 144), где Алгоритмы на графах. Нахождение кратчайшего пути (рис. 145).
Дуга Алгоритмы на графах. Нахождение кратчайшего пути (рис. 146) называется дугой из Алгоритмы на графах. Нахождение кратчайшего пути (рис. 147) в Алгоритмы на графах. Нахождение кратчайшего пути (рис. 148) (см. рис.1.19).

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 149)
Рис. 1.19. Ориентированный 3-х вершинный граф Алгоритмы на графах. Нахождение кратчайшего пути (рис. 150)

Теорема 1.4. Число всех ориентированных графов с Алгоритмы на графах. Нахождение кратчайшего пути (рис. 151) вершинами равняется Алгоритмы на графах. Нахождение кратчайшего пути (рис. 152) .
Доказательство. Действительно, число упорядоченных пар элементов из Алгоритмы на графах. Нахождение кратчайшего пути (рис. 153) равен Алгоритмы на графах. Нахождение кратчайшего пути (рис. 154), поэтому число всех возможных множеств дуг равна Алгоритмы на графах. Нахождение кратчайшего пути (рис. 155). Теорема доказана.
Определение 1.13.
Пусть Алгоритмы на графах. Нахождение кратчайшего пути (рис. 156) -множество вершин. Ориентированным графом с петлями будем называть пару множеств Алгоритмы на графах. Нахождение кратчайшего пути (рис. 157), где Алгоритмы на графах. Нахождение кратчайшего пути (рис. 158) (см. рис.1.20).

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 159)
Рис.1.20. Ориентированый граф с петлями

Теорема 1.5. Число ориентированных графов с петлями, которые имеют Алгоритмы на графах. Нахождение кратчайшего пути (рис. 160) вершин, равна Алгоритмы на графах. Нахождение кратчайшего пути (рис. 161).
Доказательство. Действительно, число различных множеств Алгоритмы на графах. Нахождение кратчайшего пути (рис. 162)(подмножеств множества Алгоритмы на графах. Нахождение кратчайшего пути (рис. 163)) равно Алгоритмы на графах. Нахождение кратчайшего пути (рис. 164). Теорема доказана.
Если рассматривается одновременно несколько типов графов, то графы описываемых определение (1.1), будем называть простыми графами.
Если в определении (1.1) к множеству Алгоритмы на графах. Нахождение кратчайшего пути (рис. 165) неупорядоченных пар присоединить еще множество всех пар вида Алгоритмы на графах. Нахождение кратчайшего пути (рис. 166), то соответствующий граф называется простым графом с петлями.
Из теоремы 1.5 следует вывод для теоремы 1.6 о простых графах.
Теорема 1.6. Число всех простых графов с Алгоритмы на графах. Нахождение кратчайшего пути (рис. 167) вершинами и петлями равен

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 168)

В дальнейшем, мы будем рассматривать простые графы.

РАЗДЕЛ ІІ ЭЙЛЕРОВЫЕ ГРАФЫ

2.1 Эйлерова Головоломка «Кенигзберзьких мостов»

Для решения серьезных математических задач математик Эйлер (Euler) использовал наглядные головоломки. Одна из них положила начало совершенно новой области исследований, выросла впоследствии в самостоятельный раздел математики - теорию графов и топологии. Особенность этой теории - в геометрическом подходе к изучению объектов.
Теория графов - одна из немногих математических дисциплин, дата рождения которой может быть установлена абсолютно точно.
Первая работа по теории графов принадлежит Леонарду Эйлеру. Она появилась в публикациях Санкт-Петербургзськои Академии наук в 1736 году.
Труд Эйлера начиналась с рассмотрения одной головоломки так называемой "задачи о кенигзберзьких мостах".
Город Кенигзберг (ныне Калининград) расположен на берегах реки Прегель и двух островах. Различные части города соединены семью мостами. Еженедельно жители города любили совершать прогулки по городу. Эйлер поставил вопрос: можно совершить прогулку, выйдя из дома и повернувшись к нему, такую, чтобы по каждому мосту пройти ровно один раз.
Сформулируем задачу, как задачу теории графов. Схематическая карта города изображена на рисунке 2.1.
Четыре части города изображены буквами Алгоритмы на графах. Нахождение кратчайшего пути (рис. 169) Поскольку нас интересують лишь переходы через мосты, мы можем считать Алгоритмы на графах. Нахождение кратчайшего пути (рис. 170) вершинами графа, ребра которого отвечают мостам. Этот граф изображено на рисунку 2.2.

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 171)
Рис. 2.1. Схема мостов в Кенигзберзи

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 172)
Рис. 2.2 Граф «Кенигзберзьких мостов»

Эйлер отметил, что этот граф не имеет единого цикла, с какой бы вершины мы не стали бы обход, мы не можем обойти весь граф и вернуться назад, не проходя каждое ребро дважды. Если бы такой цикл существовал, то из каждой вершины выходило бы столько ребер, сколько в нее входит, иначе говоря степень каждой вершины была бы четным числом. Таким образом, ответ на вопрос Эйлера отрицательный.
Изложив решения задачи о кенигзберзьких мостах, Эйлер в своей работе поставил вопрос: на каких графах можно найти цикл, содержащий все ребра графа, причем каждое ребро встречается в цикле ровно один раз?
Это дало начало системному математическому подходу к построению и изучению свойства графов.

2.2 Основные понятия и определения эйлерових графов

Определение 2.1.
Связанный граф называется эйлеровим графом, если существует замкнутая цепь, которая проходит через каждое ребро.
Такую цепь будем называть эйлеровою цепью, или эйлеровским циклом (см. рис.2.3)

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 173)
Рис.2.3 Структура вершин и ребер в неориентированном эйлеровом графе

Определение 2.2
Граф называется полуэйлеровим, если существует цепь, которая проходит через каждое его ребро ровно один раз (см. рис.2.4).

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 174)
Рис.2.4 Структура вершин и ребер в неориентированном полуэйлерованном графе
Алгоритмы на графах. Нахождение кратчайшего пути (рис. 175)
Рис.2.5 Пример неэйлерового графа

Исследовав структуру неэйлерового графа, приведенном на рис.2.5, рассмотрим необходимые и достаточные условия для того, чтобы граф был эйлеровим. Докажем лемму, которая дальше будет играть существенную роль.
Лемма 2.1
Если степень каждой вершины графа Алгоритмы на графах. Нахождение кратчайшего пути (рис. 176) не менее двух, то граф содержит цикл.
Доказательство. Если в графе есть петли или кратные дуги, то утверждение леммы очевидно. Поэтому в дальнейшем будем предполагать, что Алгоритмы на графах. Нахождение кратчайшего пути (рис. 177) является простым графом. Пусть х - произвольная вершина графа Алгоритмы на графах. Нахождение кратчайшего пути (рис. 178).
Построим по индукции маршрут

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 179)

избирая вершину Алгоритмы на графах. Нахождение кратчайшего пути (рис. 180), смежную из Алгоритмы на графах. Нахождение кратчайшего пути (рис. 181), а при Алгоритмы на графах. Нахождение кратчайшего пути (рис. 182) избирая вершину Алгоритмы на графах. Нахождение кратчайшего пути (рис. 183), смежную с Алгоритмы на графах. Нахождение кратчайшего пути (рис. 184) и отличающуюся от Алгоритмы на графах. Нахождение кратчайшего пути (рис. 185) (существование такой вершины следует из условия леммы). Поскольку Алгоритмы на графах. Нахождение кратчайшего пути (рис. 186) имеет конечное число вершин, то в конце концов мы придем к вершине Алгоритмы на графах. Нахождение кратчайшего пути (рис. 187), из которой вышли. Получим цикл Алгоритмы на графах. Нахождение кратчайшего пути (рис. 188).
Лемма доказана.
Теорема 2.1
Для связного графа Алгоритмы на графах. Нахождение кратчайшего пути (рис. 189) следующие условия эквивалентны:
1.Алгоритмы на графах. Нахождение кратчайшего пути (рис. 190)- эйлеровый граф;
2.каждая вершина Алгоритмы на графах. Нахождение кратчайшего пути (рис. 191) имеет парную степень;
.множественное число ребер графа Алгоритмы на графах. Нахождение кратчайшего пути (рис. 192) можно разбить на простые циклы.
Доказательство.
Пусть Алгоритмы на графах. Нахождение кратчайшего пути (рис. 193)- эйлеровский цикл графа Алгоритмы на графах. Нахождение кратчайшего пути (рис. 194). Будем двигаться по циклу Алгоритмы на графах. Нахождение кратчайшего пути (рис. 195). Прохождение каждой вершины увеличивает степень каждой вершины на 2, и поскольку каждое ребро входит в Алгоритмы на графах. Нахождение кратчайшего пути (рис. 196) ровно п раз, то любая вершина имеет парную степень.
Алгоритмы на графах. Нахождение кратчайшего пути (рис. 197) Поскольку Алгоритмы на графах. Нахождение кратчайшего пути (рис. 198)- связный граф, степень каждой вершины равна по крайней мере 2, ибо в силу леммы 2.1 Алгоритмы на графах. Нахождение кратчайшего пути (рис. 199)содержит простой цикл С. Исключим ребра цикла, получим остовной подграф, в котором каждая вершина имеет чётную степень. Если у Алгоритмы на графах. Нахождение кратчайшего пути (рис. 200) нет ребер, то (3) доказано. В противном случае применим проведенные выше рассуждения к Алгоритмы на графах. Нахождение кратчайшего пути (рис. 201), получим граф Алгоритмы на графах. Нахождение кратчайшего пути (рис. 202), в котором степени всех вершин являются чётными и так далее. Одновременно с пустым графом Алгоритмы на графах. Нахождение кратчайшего пути (рис. 203), получим разбиение множества ребер на Алгоритмы на графах. Нахождение кратчайшего пути (рис. 204) циклов
Алгоритмы на графах. Нахождение кратчайшего пути (рис. 205)Пусть множественное число ребер можно разбить на простые циклы. Пусть Алгоритмы на графах. Нахождение кратчайшего пути (рис. 206) - один из простых циклов. Если Алгоритмы на графах. Нахождение кратчайшего пути (рис. 207) состоит только из этого цикла, то Алгоритмы на графах. Нахождение кратчайшего пути (рис. 208) -эйлеровский граф. В противоположном случае существует другой простой цикл, который имеет вершину Алгоритмы на графах. Нахождение кратчайшего пути (рис. 209), общую из Алгоритмы на графах. Нахождение кратчайшего пути (рис. 210). Цепь, которая начинается с Алгоритмы на графах. Нахождение кратчайшего пути (рис. 211) и состоит из цикла Алгоритмы на графах. Нахождение кратчайшего пути (рис. 212) и следующего за ним цикла Алгоритмы на графах. Нахождение кратчайшего пути (рис. 213), является замкнутой цепью, которая содержит все ребра графа Алгоритмы на графах. Нахождение кратчайшего пути (рис. 214), каждое один раз . Следовательно, Алгоритмы на графах. Нахождение кратчайшего пути (рис. 215) - эйлеровский граф.
Из теоремы 2.1 следует следующая теорема.
Теорема 2.2. Связный граф есть эйлеровым тогда и только тогда, когда каждая его вершина имеет чётную степень.
. Алгоритмы на графах. Нахождение кратчайшего пути (рис. 216)
Рис.2.6 Пример эйлерового графа в теореме 2.2

Доказательство. Граф изображеный на рисунке 2.6. является эйлеровим, поскольку:
. Степень вершин А, F, D, C, Q = 4 (чёрные).
. Степень вершин B, E = 2 (чёрные)
. Множество ребер этого графа является объединение двух простых циклов Алгоритмы на графах. Нахождение кратчайшего пути (рис. 217) и Алгоритмы на графах. Нахождение кратчайшего пути (рис. 218).
Теорема 2.3. Связный граф является полуэйлеровим тогда и только тогда, когда в нем не более двух вершин нечетной степени..

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 219)
Рис. 2.7 Пример полуэйлерового графа к теореме 2.3

Доказательство. Граф изображен на рисунке 2.7. является полуэйлеровим, поскольку:
. Степень вершин А, F, C = 4 (чётные);
. Степень вершин B = 2 (чётные);
. Степень вершин E, D = 3 (нечетные);
. Вот один из возможных вариантов обхода Алгоритмы на графах. Нахождение кратчайшего пути (рис. 220). Начальной точкой маршрута является точка Алгоритмы на графах. Нахождение кратчайшего пути (рис. 221), а конечной является точка Алгоритмы на графах. Нахождение кратчайшего пути (рис. 222).
Если граф имеет две вершины с нечетными степенями (см. рис. 2.7), то для любой полуэйлеровой цепи одна из этих вершин будет начальной, а другая конечной. Для доказательства достаточно совместить отрезком вершины с нечетными степенями.
Заметим, что согласно «лемме о рукопожатии» - число вершин нечетной степени является четным.
Попробуем для произвольного графа указать наименьшее число цепей таких, что: никакие два не имеют общих ребер и все они полностью накрывают разом весь граф. Очевидно, если на графе есть такое семейство цепей, то каждая вершина нечетной степени должна быть либо начальной или конечной вершиной какой-то цепи. Общее число вершин с нечетной степенью согласно лемме о рукопожатие является четным, скажем равным Алгоритмы на графах. Нахождение кратчайшего пути (рис. 223).
Таким образом, каждое семейство цепей, накрывающих граф, должно содержать по крайней мере Алгоритмы на графах. Нахождение кратчайшего пути (рис. 224) цепей.
Докажем, что существование Алгоритмы на графах. Нахождение кратчайшего пути (рис. 225) вершин с нечетным степенью является и достаточным условием существования цепей накрывают граф.
Теорема 2.4. На любом связном графе с Алгоритмы на графах. Нахождение кратчайшего пути (рис. 226) вершинами нечётной степени существует семейство цепей, которые в совокупности содержат все ребра графа в точности один раз каждое.
Доказательство. Обозначим вершины с нечётными степенями
Алгоритмы на графах. Нахождение кратчайшего пути (рис. 227)
Если мы прибавим к нашему графу ребра
Алгоритмы на графах. Нахождение кратчайшего пути (рис. 228)
то все вершины полученного графа будут чётными и на нем найдется эйлеров цикл Алгоритмы на графах. Нахождение кратчайшего пути (рис. 229). При отбрасывании прибавленных ребер цикл Алгоритмы на графах. Нахождение кратчайшего пути (рис. 230) распадется на Алгоритмы на графах. Нахождение кратчайшего пути (рис. 231) отдельных цепей, которые содержат все ребра графа.
Граф, изображенный на рисунку 2.8 имеет четыре вершины с нечётными степенями Алгоритмы на графах. Нахождение кратчайшего пути (рис. 232) и накрывается двумя цепями Алгоритмы на графах. Нахождение кратчайшего пути (рис. 233) и Алгоритмы на графах. Нахождение кратчайшего пути (рис. 234).

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 235)
Рис.2.8 Граф с нечётной степенью вершин к теореме 2.4

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

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 236)
Рис. 2.9 Эйлеровый цикл в графе - «Сабля Магомета»

Большинство сборников математических задач с развлекательной математики содержат задачи о лабиринтах. Лабиринт состоит из коридоров и их перекрёстков. Следовательно, он может быть изображен графом, в котором ребра соответствуют коридорам, а вершины - перекрёсткам.
Эйлеровим графом должен быть и план осмотра любой выставки, где вдоль помещений выставки нужно расставить указатели обхода таким путем, чтобы каждый экспонат был осмотрен ровно один раз.
Алгоритмы на графах. Нахождение кратчайшего пути (рис. 237)
Рис.2.10 Применение аппарата эйлерових циклов при решении задач “маршрут выставки»

Предположим, что экспонаты расположены с обеих сторон пути, проходящий по территории выставки. Оказывается, что тогда, каким бы ни был соответствующий граф (был бы он только связанным), можно провести посетителя так, чтобы каждый путь был пройден дважды - по одному разу в каждом направлении (см.рис.2.10).
Теорема 2.5. В связном графе существует ориентированный цикл, который проходит через ребро по одному разу в каждом из двух направлений.
Доказательство. Сформулируем общее правило построения цепи, которое проходит вдоль всех ребер графа в точности по одному разу в каждом направлении. Начнём с произвольной вершины Алгоритмы на графах. Нахождение кратчайшего пути (рис. 238) и пройдем вдоль Алгоритмы на графах. Нахождение кратчайшего пути (рис. 239), отметив это ребро маленькой стрелкой в точке Алгоритмы на графах. Нахождение кратчайшего пути (рис. 240), которая показывает выбранное направление. Затем переходим последовательно к другим вершинам. Одну и ту же вершину можно посещать несколько раз. Каждый раз, попав в какую-то вершину, мы будем ставить на соответствующем ребре стрелку указывает направление прибытия. Кроме того, попадая в какую-то вершину впервые, мы отметим входящее ребро, чтобы потом его можно было отличить от других.

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 241)
Рис.2.11. Граф к теореме 2.5.

Исходя из вершины, мы всегда будем выбирать еще неиспользованное направление: или ребро, по которому мы совсем не проходили, или ребро помечено стрелкой, которая указывает на то, что мы на нём уже были. Договоримся также, что только тогда, когда у нас нет выбора, мы используем для выхода ребро, которое впервые посетили.
Будем продолжать путь до тех пор, когда это вообще возможно. В каждой вершине есть одинаковое число возможностей для входа и для выхода. Поэтому движение может закончиться только в точке Алгоритмы на графах. Нахождение кратчайшего пути (рис. 242). Остается проверить, что во всех вершинах все ребра будут пройдены в обоих направлениях.
Для точки Алгоритмы на графах. Нахождение кратчайшего пути (рис. 243) ясно- все ребра, исходящие, будут использованы, поскольку в противном случае мы могли бы двигаться дальше; все ребра, входящие, также будут использованы, потому что их число равно числу ребер, которые исходят. В частности, ребро Алгоритмы на графах. Нахождение кратчайшего пути (рис. 244) будет пройдено в обоих направлениях. Но это означает, что все ребра, которые инцидентны Алгоритмы на графах. Нахождение кратчайшего пути (рис. 245), также будут пройдены в обоих направлениях. Прежнее ребро Алгоритмы на графах. Нахождение кратчайшего пути (рис. 246), которое входит в Алгоритмы на графах. Нахождение кратчайшего пути (рис. 247), должно использоваться для выхода только в последнюю очередь. Тоже самое рассуждение можно примененить к следующему ребру Алгоритмы на графах. Нахождение кратчайшего пути (рис. 248) и следующей вершине Алгоритмы на графах. Нахождение кратчайшего пути (рис. 249) и так далее.
Итак, во всех вершинах, которые будут достигнуты, все ребра окажутся пройденными в обоих направлениях. Поскольку наш граф является связным, это означает, что он будет полностью пройденным.
Заметим, что описанный метод обхода графа может быть использован для решения задач, связанных с поисками маршрутов выхода из лабиринтов.

2.3 Примеры Эйлерових графов

Пример 2.1.Задача о назначении на должность.
Пусть имеется несколько различных вакантных должностей и группа людей, желающих их занять, причем каждый из претендентов достаточно квалифицированный для нескольких, но не для всех имеющихся должностей.
Можно ли каждому из этих людей предоставить одну из тех должностей, которые ему подходят?
Мы можем снова проиллюстрировать эту задачу с помощью некоторого графа, в данном случае выглядит особенно. Как уже сказано, есть определенная группа людей, которую мы обозначим как М и некоторое множество должностей, Р. Строим граф, проводя ребра (м, р), что соединяют каждого человека м с теми должностями р, которые он может занять. На этом графе не будет ребер, соединяющих между собой две вершины м или р, поэтому такой граф имеет вид, приведенный на рис.2.12:

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 250)
Рис.2.12 Граф для решения задачи о назначении на должность

Всегда найти подходящее место для каждого претендента мы не можем: для этого необходимо, чтобы должностей было не менее претендентов. Но этого недостаточно.
Пусть, например, группа претендентов состоит из двух столяров и человека, который может работать и столяром и сантехником, и для них четыре должности: одно место столяра и три места сантехника. Тогда, очевидно, столяр останется без работы, хотя в данном случае мест более претендентов, и хотя среди претендентов есть люди которые могут работать на двух должностях.
Предположим, что общее количество претендентов - N. Для выполнения задачи должна выполняться следующее условия:
Какую бы группу из k человек, k = 1,2, ..., N, мы не приняли, должно быть по крайней мере k должностей, каждую из которых может занимать хотя бы один из наших претендентов.
Например, если один из людей является столяром, а второй - одновременно и столяром и сантехником и если есть два места сантехника, то наше условие выполняется при k = 2, но не выполняется при k = 1, поэтому указанные люди не могут одновременно устроиться на работу.
Выделенную условие мы кратко назовем условием разнообразия.
Вывод: вышеприведенная задача может использоваться работниками службы занятости для правильного размещения работников на должности.
Пример 2.2 Другие формулировки.
Эта задача, об установлении на графе некоторого соответствия между его вершинами, может иметь и много других формулировок.
Допустимо, например, что у нас есть группа из к ребят и к девушек. Кое-кто из них уже знакомые между собой, и возникает вопрос: в каком случае можно разбить этих молодых людей не пары для танцев так, чтобы все ребята танцевали с знакомыми девушками?
Можно также изменить эту задачу: в маленьком селе есть одинаковое количество взрослых ребят и девушек; не допускается, чтобы парень женился на близкой родственнице - сестре, названной сестре или двоюродной сестре. При каком условии для парня найдется невеста из этого села? Опять мы можем решить эту задачу с помощью двудольного графа - в этом случае его вершины будут соединены ребрами лишь тогда, когда соответствующие люди не являются родственниками.
Еще один вариант этой задачи. В нашей школе есть несколько кружков: C1,C2.,CN. Каждый из этих кружков должен иметь старосту.
Для того, чтобы исключить перегрузку учеников, было поставлено условие, чтобы ни один ученик не был старостой более, чем одного кружка. При каком условии это возможно?
Понятно, что это возможно не всегда; если количество кружков в сравнительно небольшой школе очень большая, то это невозможно.
Чтобы решить эту задачу, мы опять обратимся к двудольному графу.
В этом случае одно множественное число вершин графа будет состоять из N кружков
А другое множественное число вершин P - это множество всех учеников школы. Мы проводим ребро от кружка С1 к ученику р в том случае, если р является членом С1. При этом условие разнообразия превращается в следующее: каждая группа из к кружков (при к = 1, 2..., N) должна включать по меньшей мере к разных учеников. Согласно выше указанному - это то условие при которой кружки могут иметь разных старост.
Если количество кружков слишком большое, не всегда легко довести справедливость условия разнообразия. Поэтому поставим вопрос: Можно ли указать какое-либо простое правило формирования кружков, которое гарантирует возможность вибора для них разных старост?
Это действительно возможно. Для того, чтобы показать, что мы имеем в виду, допустимо, что каждый кружок состоит по крайней мере из пяти учеников. Тогда на соответствующем графе из каждой вершины множественного числа С будет выходить по крайней мере 5 ребер. Для группы из к кружков будет не меньше 5k ребер, которые выходят из соответствующих вершин С к вершинам из Р (дополнение 2, где к = 4).

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 251)
Рис.2.13 Граф для решения задачи выбора

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

РАЗДЕЛ 3 ГАМИЛЬТОНОВЫ ГРАФЫ

3.1 Сущность гамильтоновых графов

Циклы эйлера характеризуются свойством проходить по одному разу через каждое ребро графа, а гамильтонов цикл - через каждую вершину.
Название гамильтонов граф возникла в связи с тем, что в 1859 году известный ирландский математик Уильям Гамильтон выпустил в продажу своеобразную игрушечную головоломку. Ее основой частью был правильный додекаэдр, сделан из дерева [4] (рис.3.1). Это один из так называемых правильных многогранников: его гранями являются 12 правильных пятиугольников, в каждой из его вершин сходится три ребра.
Каждая из вершин гамильтонова додекаэдра была обозначена названием одного из крупных городов земного шара- Брюссель, Кантон, Дели, Лондон и так далее. Задача состоит в нахождении пути вдоль ребер додекаэдра, который проходит через каждый город в точности один раз. Гамильтонов цикл на додекаэдр не покрывает, конечно, всех ребер додекаэдра, потому что в каждой вершине он проходит в точности по двум ребрам.

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 252)Алгоритмы на графах. Нахождение кратчайшего пути (рис. 253)
Рис.3.1 Гамильтонив цикл в додекаэдре

3.2 Основные понятия и определения

Определение 3.1.
Связный граф называется гамильтоновым графом, если существует замкнутая цепь, которая проходит через каждую вершину графа ровно один раз.
Определение 3.2.
Связный граф называется полугамильтоновим, если существует цепь, проходящая через каждую его вершину ровно один раз.
Несмотря на сходство в определениях эйлерових и гамильтоновых графов, согласно теории для этих классов графы сильно отличаются.
К теории гамильтоновых графов относится и задача о бродячем торговце или задача о коммивояжере. В задаче о бродячем торговце речь идет о некотором районе, и торговце, который должен посетить определенное количество городов этого района. Расстояния между городами известны, и надо найти кратчайший путь, который проходит через все города и заканчивается в начальном пункте.
Города можно изображать вершинами некоторого графа, в котором каждой паре вершин приписана расстояние Алгоритмы на графах. Нахождение кратчайшего пути (рис. 254). Речь идет о поиске гамильтонова цикла Алгоритмы на графах. Нахождение кратчайшего пути (рис. 255), для которого сумма Алгоритмы на графах. Нахождение кратчайшего пути (рис. 256) является минимальной.
Поскольку рассматривается конечное число вершин, то задача решается (при небольшом количестве вершин) путем простого перебора. Эффективных алгоритмов для решаемой этой задачи не создано, хотя этой проблеме посвящено много исследований.
Установлено различные достаточные условия гамильтоновости графа. Сформулируем две из них.
Теорема 3.1. (О.Оре, 1960). Если для любой пары Алгоритмы на графах. Нахождение кратчайшего пути (рис. 257) и Алгоритмы на графах. Нахождение кратчайшего пути (рис. 258) несмежных вершин графа Алгоритмы на графах. Нахождение кратчайшего пути (рис. 259)с Алгоритмы на графах. Нахождение кратчайшего пути (рис. 260) вершинами Алгоритмы на графах. Нахождение кратчайшего пути (рис. 261) имеет место неровно
Алгоритмы на графах. Нахождение кратчайшего пути (рис. 262)(3.1)

то граф Алгоритмы на графах. Нахождение кратчайшего пути (рис. 263) гамильтоновый.
Напомним, что Алгоритмы на графах. Нахождение кратчайшего пути (рис. 264) -степень вершины Алгоритмы на графах. Нахождение кратчайшего пути (рис. 265), т.е. число ребер, исходящих из вершины Алгоритмы на графах. Нахождение кратчайшего пути (рис. 266).
Доказательство. Будем доказывать от противного. Предположим, что существует негамильтоновый граф с Алгоритмы на графах. Нахождение кратчайшего пути (рис. 267) вершинами, в котором для любой пары несмежных вершин Алгоритмы на графах. Нахождение кратчайшего пути (рис. 268) и Алгоритмы на графах. Нахождение кратчайшего пути (рис. 269) выполняется условие (3.1). Добавление к графу новых ребер нарушает условие (3.1). Обозначим через Алгоритмы на графах. Нахождение кратчайшего пути (рис. 270) максимальный негамильтовый граф, т.е. такой граф, присоединение к которому нового ребра превращает граф на гамильтоновый. Очевидно,Алгоритмы на графах. Нахождение кратчайшего пути (рис. 271) не может быть полным графом. Поэтому в Алгоритмы на графах. Нахождение кратчайшего пути (рис. 272) существует пара несмежных вершин Алгоритмы на графах. Нахождение кратчайшего пути (рис. 273) и Алгоритмы на графах. Нахождение кратчайшего пути (рис. 274). Присоединение к Алгоритмы на графах. Нахождение кратчайшего пути (рис. 275) ребра Алгоритмы на графах. Нахождение кратчайшего пути (рис. 276) превращает граф Алгоритмы на графах. Нахождение кратчайшего пути (рис. 277) на гамильтонов в силу максимальной негамильтоновости Алгоритмы на графах. Нахождение кратчайшего пути (рис. 278). Таким образом, существует гамильтонова цепь. соединяющая Алгоритмы на графах. Нахождение кратчайшего пути (рис. 279) и Алгоритмы на графах. Нахождение кратчайшего пути (рис. 280), и проходящая через все вершины (рис. 3.2)

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 281)
Рис. 3.2 Гамильтонова цепь (1)

Обведём каждую из Алгоритмы на графах. Нахождение кратчайшего пути (рис. 282), какие смежные с Алгоритмы на графах. Нахождение кратчайшего пути (рис. 283), кружочком, и вершину, которая лежит левее, квадратиком так, как изображено на рисунку:

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 284)
Рис. 3.3 Гамильтонова цепь (2)

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 285) из этих Алгоритмы на графах. Нахождение кратчайшего пути (рис. 286) вершин окруженны кружочком;
Алгоритмы на графах. Нахождение кратчайшего пути (рис. 287) из этих Алгоритмы на графах. Нахождение кратчайшего пути (рис. 288) вершин окружены квардатиком;
Алгоритмы на графах. Нахождение кратчайшего пути (рис. 289)- не окруженные квадратиком.
Отметим, что в силу условия теоремы

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 290)

Отсюда следует, что вершина Алгоритмы на графах. Нахождение кратчайшего пути (рис. 291) смежная с некоторой вершиной, которая окружена квадратиком . Таким образом, выходит, что граф Алгоритмы на графах. Нахождение кратчайшего пути (рис. 292) имеет гамильтоновый цикл, изображенный на рисунку 3.4

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 293)
Рис.3.4 Гамильтонив цепь(3)

Следовательно пришли к противоречию . Теорема доказана.
Из теоремы 3.1 следует следующая теорема.
Теорема 3.2 (Г.Дирака, 1952) Если для любой вершины Алгоритмы на графах. Нахождение кратчайшего пути (рис. 294) графа Алгоритмы на графах. Нахождение кратчайшего пути (рис. 295) с Алгоритмы на графах. Нахождение кратчайшего пути (рис. 296) вершинами Алгоритмы на графах. Нахождение кратчайшего пути (рис. 297) выполняется неравенство Алгоритмы на графах. Нахождение кратчайшего пути (рис. 298), то граф Алгоритмы на графах. Нахождение кратчайшего пути (рис. 299) гамильтоновый.
Доказательство. От противного. Пусть Алгоритмы на графах. Нахождение кратчайшего пути (рис. 300)- не гамильтоновый граф. Добавим к Алгоритмы на графах. Нахождение кратчайшего пути (рис. 301) минимальное количество новых вершин Алгоритмы на графах. Нахождение кратчайшего пути (рис. 302), … ,Алгоритмы на графах. Нахождение кратчайшего пути (рис. 303), соединяя их со всеми вершинами Алгоритмы на графах. Нахождение кратчайшего пути (рис. 304) так, чтобы: Алгоритмы на графах. Нахождение кратчайшего пути (рис. 305):= Алгоритмы на графах. Нахождение кратчайшего пути (рис. 306) + Алгоритмы на графах. Нахождение кратчайшего пути (рис. 307)+ … + Алгоритмы на графах. Нахождение кратчайшего пути (рис. 308)был гамильтоновый.
Пусть Алгоритмы на графах. Нахождение кратчайшего пути (рис. 309), Алгоритмы на графах. Нахождение кратчайшего пути (рис. 310), Алгоритмы на графах. Нахождение кратчайшего пути (рис. 311), … ,Алгоритмы на графах. Нахождение кратчайшего пути (рис. 312) - гамильтонов цикл в графе Алгоритмы на графах. Нахождение кратчайшего пути (рис. 313), причем Алгоритмы на графах. Нахождение кратчайшего пути (рис. 314)Алгоритмы на графах. Нахождение кратчайшего пути (рис. 315)Алгоритмы на графах. Нахождение кратчайшего пути (рис. 316) , Алгоритмы на графах. Нахождение кратчайшего пути (рис. 317)Алгоритмы на графах. Нахождение кратчайшего пути (рис. 318)Алгоритмы на графах. Нахождение кратчайшего пути (рис. 319) , Алгоритмы на графах. Нахождение кратчайшего пути (рис. 320)Алгоритмы на графах. Нахождение кратчайшего пути (рис. 321)Алгоритмы на графах. Нахождение кратчайшего пути (рис. 322). Тогда Алгоритмы на графах. Нахождение кратчайшего пути (рис. 323)Алгоритмы на графах. Нахождение кратчайшего пути (рис. 324)Алгоритмы на графах. Нахождение кратчайшего пути (рис. 325) , Алгоритмы на графах. Нахождение кратчайшего пути (рис. 326) Алгоритмы на графах. Нахождение кратчайшего пути (рис. 327) {Алгоритмы на графах. Нахождение кратчайшего пути (рис. 328),…,Алгоритмы на графах. Нахождение кратчайшего пути (рис. 329)}, иначе вершина Алгоритмы на графах. Нахождение кратчайшего пути (рис. 330) была бы не нужна.
Далее, если в цикле Алгоритмы на графах. Нахождение кратчайшего пути (рис. 331), Алгоритмы на графах. Нахождение кратчайшего пути (рис. 332), Алгоритмы на графах. Нахождение кратчайшего пути (рис. 333), … ,Алгоритмы на графах. Нахождение кратчайшего пути (рис. 334),Алгоритмы на графах. Нахождение кратчайшего пути (рис. 335), … ,Алгоритмы на графах. Нахождение кратчайшего пути (рис. 336) есть вершина, смежная с вершиной w, то вершина v 'несмежная с вершиной v, так как иначе можно было бы построить гамильтоновый цикл Алгоритмы на графах. Нахождение кратчайшего пути (рис. 337),Алгоритмы на графах. Нахождение кратчайшего пути (рис. 338), … ,Алгоритмы на графах. Нахождение кратчайшего пути (рис. 339),Алгоритмы на графах. Нахождение кратчайшего пути (рис. 340), … ,Алгоритмы на графах. Нахождение кратчайшего пути (рис. 341) без вершины , взяв последовательность вершин Алгоритмы на графах. Нахождение кратчайшего пути (рис. 342), … ,Алгоритмы на графах. Нахождение кратчайшего пути (рис. 343)в обратном порядке. Отсюда следует, что число вершин графа Алгоритмы на графах. Нахождение кратчайшего пути (рис. 344), не смежны с Алгоритмы на графах. Нахождение кратчайшего пути (рис. 345), не менее числа вершин, смежных с Алгоритмы на графах. Нахождение кратчайшего пути (рис. 346). Но для любой вершины Алгоритмы на графах. Нахождение кратчайшего пути (рис. 347) графа Алгоритмы на графах. Нахождение кратчайшего пути (рис. 348) d (Алгоритмы на графах. Нахождение кратчайшего пути (рис. 349)) ≥ p/2+n по построению, в том числе d(Алгоритмы на графах. Нахождение кратчайшего пути (рис. 350))p/2 + n. Общее число вершин (смежных и не смежных с Алгоритмы на графах. Нахождение кратчайшего пути (рис. 351)) составляет n + p-1. Таким образом, имеем:
+ p-1 = d(v)+d(V) ≥ d(w)+d(v) ≥ p/2+n+p/2+n = 2n+p.

Следовательно, 0 Алгоритмы на графах. Нахождение кратчайшего пути (рис. 352) n+1, что противоречит потому, что n > 0. Теорема доказана.

3.3 Примеры гамильтоновых графов

Пример 3.1. Найти все гамильтовые циклы для графа, приведенного на рис.3. 5 [10]

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 353)
Рис.3.5 Поиск всех гамильтоновых циклов для ориентированного графа
Таблиця 3.1 Результаты поиска гамильтоновых циклов
Алгоритмы на графах. Нахождение кратчайшего пути (рис. 354)

Пример 3.2. Найти кратчайшие гамильтоновые циклы в задаче «коммивояжёра» для 6-городов, расположенных по графу на рис.3.6 [10]

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 355)
Рис.3.6 Графы при решении задачи «коммивояжёра»

Результаты расчетов длины «гамильтоновых циклов» в задаче «коммивояжёра» (рис.3.6) приведены в табл.3.2

Таблиця 3.2 Результаты расчетов длины «гамильтоновых циклов»
Алгоритмы на графах. Нахождение кратчайшего пути (рис. 356)

Пример 3.3. Покажите, что граф, изображенный на рисунку 3.7, не есть гамильтоновым [11].
Алгоритмы на графах. Нахождение кратчайшего пути (рис. 357)
Рис. 3.7 Пример не гамильтонового графа

Решение.
Предположим, что в связном графе найдется гамильтоновый цикл. Каждая вершина v включается в гамильтонов цикл С выбором двух инцидентных с ней ребер, а значит, степень каждой вершины в гамильтоновом цикле (после удаления лишних ребер) равна 2. Степень вершин данного графа - 2 или 3. Вершины степени 2 входят в цикл вместе с обоими инцидентными с ними ребрами. Итак, ребра аb, ае, cd, cb, hi, hg и ij в том или ином порядке входят в гамильтонов цикл С (см. рис. 3.8).
Ребро bf не может быть частью цикла С, поскольку каждая вершина такого цикла должна иметь степень 2. Значит, ребра fj и fg обязаны входить в цикл С, чтобы включить в него вершину f. Но тогда ребра je и gd никак могут принадлежать циклу С, поскольку в противном случае в нем появятся вершины степени три. Это заставляет нас включить в цикл ребро ed, что приводит нас к противоречию: ребра, которые мы были вынуждены выбрать, образуют два несвязных цикла, а не один, существование которого мы предполагали. Вывод: граф, изображенный на рисунке 3.8, не является гамильтоновым.

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 358)
Рис.3.8. К доказательству негамильтоновости графа
Раздел 4. Алгоритмы Дейкстры и Флойда. Задачи нахождения кратчайшего пути.

.1. Математическая модель решения задач методом Дейкстры

Любая задача, требующая нахождения оптимальных маршрутов может быть выполнена с помощью алгоритма Дейкстры. Это касается и сетей, и транспортных потоков, и обработка графов. Очень часто используется не сам алгоритм в чистом виде, а его модификация.
Постановка задачи на максимум выглядит следующим образом:
Пусть дан граф G=(Х, Г), дугам которого приписаны веса (стоимости длины), задаваемые матрицей С = [cij].
Задача о «кратчайшем пути» состоит в нахождении кратчайшего пути от заданной начальной вершины sОx до заданной конечной вершины tОx, при условии, что такой путь существует tОR(s) (здесь R(s) - множество, достижимое из вершины s) и все циклы в графе имеют неотрицательный суммарный вес. Так как если в графе будет присутствовать цикл с отрицательным суммарным весом и хi - некоторая его вершина, то, двигаясь от s к хi, обходя этот цикл достаточно большое число раз и попадая, наконец в t, получится путь со сколь угодно малым (→ ∞) весом. Таким образом, в этом случае кратчайшего пути не существует. Так что неориентированные дуги (ребра) графа G не могут иметь отрицательные веса.

4.2 Описание метода решения задач

Процедура находит путь минимального веса в графе G = (V, E) заданном весовой матрицей W у которой элемент равен весу ребра соединяющего i-ую и j-ую вершины. При этом предполагается, что все элементы wij неотрицательны. Путь ищется из вершины номер u1 к вершине номер u2 . Процедура использует алгоритм Дейкстры. Для представления веса, равного бесконечности, используется число GM, передаваемое в алгоритм. Это число можно задавать в зависимости от конкретной задачи.
Алгоритм по которому происходит поиск заключается в следующем:
. Всем вершинам приписывается вес - вещественное число, d(i) := GM для всех вершин кроме вершины с номером u1, а d(u1 ) := 0.
. Всем вершинам приписывается метка m(i) := 0.
. Вершина u1 объявляется текущей: t := u1.
. Для всех вершин у которых m(i) равно 0, пересчитываем вес по формуле

d(i) := min{d(i), d(t)+W[t,i]}.

5. Среди вершин для которых выполнено m(i) = 0 ищем ту для которой d(i) минимальна, если минимум не найден, т.е. вес всех не "помеченных" вершин равен бесконечности (GM), то путь не существует, покидаем алгоритм.
. Иначе найденную вершину c минимальным весом полагаем текущей и помечаем (m(t) := 1).
. Если t = u2 , то найден путь веса d(t), покидаем алгоритм и переходим на следующий шаг.

4.3. Функциональные тесты

Задача 1
Дан граф смежности для нахождения минимального пути от вершины 1 до всех остальных (рис. 4.1.)

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 359)
Рис. 4.1 Граф к задаче 1

Представим граф, в виде матрица длин дуг

Таблица 1. Представление матрицы к задаче 1
X1X2X3X4X5X6
x110187
x2101699
x31615
x47912
x523
x61523

Стартовая вершина, от которой строится дерево кратчайших путей - вершина 1.
Задаем стартовые условия: d(1)=0, d(x)=∞ Окрашиваем вершину 1, y=1.
Находим ближайшую вершину к окрашенной нами, используя формулу:

d(x)=min{d(x);d(y)+a(y,x)}

Минимальную длину имеет путь от вершины 1 до вершины 4 d(4)=7. Включаем вершину №4 в текущее ориентированное дерево, а так же дугу, ведущую в эту вершину. Согласно выражению это дуга (1,4)
Мы получили ориентированное дерево кратчайших путей начинающихся в вершине №1 для исходного графа.
(1)=1 Длина маршрута L=0;(2)=1-4-2 Длина маршрута L=16;(3)=1-4-2-5-6-3 Длинамаршрута L=63;(4)=1-4 Длина маршрута L=7;(5)=1-4-2-5 Длина маршрута L=25;(6)=1-4-2-5-6Длина маршрута L=48.

Задача 2
Дан граф смежности для нахождения минимального пути от вершины 1 до всех остальных

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 360)
Рис. 4.2. Граф к задаче 2

Представим граф, в виде матрица длин дуг

Таблица 2 Представление графа
X1X2X3X4X5X6
x10532
x201
x301
x403
x520
x610

Стартовая вершина, от которой строится дерево кратчайших путей - вершина 1.
Задаем стартовые условия: d(1)=0, d(x)=∞
Окрашиваем вершину 1, y=1.
Находим ближайшую вершину к окрашенной нами, используя формулу:

d(x)=min{d(x); d(y)+a(y,x)}(2)=min{8}(3)=min{9}(4)=min{2}
d(5)=min{6}(6)=min{5}

Минимальную длину имеет путь от вершины 1 до вершины 4 d(4)=2. Включаем вершину №4 в текущее ориентированное дерево, а так же дугу, ведущую в эту вершину. Согласно выражению это дуга (1,4)
Мы получили ориентированное дерево кратчайших путей начинающихся в вершине №1 для исходного графа.

d(1)=1Длина маршрутаL=0;(2)=1-4-6-5-2 Длина маршрута L=8;(3)=1-4-6-5-2-3 Длина маршрута L=9;(4)=1-4 Длина маршрута L=2;(5)=1-4-6-5 Длина маршрута L=6;(6)=1-4-6 Длина маршрута L=5.

4.3 Построение математической модели алгоритмом Флойда

Цель алгоритма Флойда - определение кратчайшего пути между вершинами взвешенного графа. Этот алгоритм более общий по сравнению с алгоритмом Дейкстры, так как он находит кратчайшие пути между любыми двумя узлами сети. В этом алгоритме сеть представлена в виде квадратной матрицы с n строками и n столбцами. Элемент (i, j) равен расстоянию dij от узла i к узлу j, которое имеет конечное значение, если существует дуга (i, j), и равен бесконечности в противном случае.
Постановка задачи: пусть дан непустой взвешенный граф G=(V, E) с произвольными весами ребер (дуг). Требуется найти длины кратчайших путей между всеми парами вершин графа
Применительно к прикладной задаче целью разработки приложения является - определение наиболее эффективного маршрута пересылки сообщений между любыми двумя районами. Причем алгоритм может решать подобные задачи для разных критериев, например, критерием может быть - поиск наиболее дешевого пути (каждой дуге ставится в соответствие денежный эквивалент, который необходимо затратить при использовании этой дуги); или поиск наиболее быстрого пути (в этом случае каждой дуге присваивается время, которое будет потрачено при ее использовании); можно таким же образом найти самый надежный путь (каждой дуге ставится в соответствие коэффициент риска передачи сообщения по этой дуге/пути).
Подобных задач может возникнуть очень много, а цель этих задач одинакова - нахождение кратчайшего пути из одного состояния в другое (относительно графа - нахождение минимального расстояния между 2-мя вершинами).

4.4 Описание математического метода алгоритма Флойда

Основная идея метода Флойда состоит в следующем: пусть есть три узла i, j и k и заданы расстояния между ними (рис. 4.3.).
Если выполняется неравенство dij + djk k путем i -> j -> k.
Такая замена (условно называемая треугольным оператором) выполняется систематически в процессе выполнения алгоритма Флойда.
Алгоритмы на графах. Нахождение кратчайшего пути (рис. 361)
Рис. 4.3 Треугольный оператор

Алгоритм Флойда требует выполнения следующих действий (рис. 4.4.).
Шаг 0. Определяем начальную матрицу расстояния D0 и матрицу последовательности узлов S0. Диагональные элементы обеих матриц помечаются знаком "-", показывающим, что эти элементы в вычислениях не участвуют. Полагаем k :=1.

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 362)
Рис.4.4 Первоначальная ситуация

Основной шаг k. Задаем строку k и столбец k как ведущую строку и ведущий столбец. Рассматриваем возможность применения треугольного оператора ко всем элементам dij матрицы Dk-1. Если выполняется неравенство dik + dkj k, j k, i j), тогда выполняем следующие действия:
·создаем матрицу Dk путем замены в матрице Dk-1 элемента dij на сумму dik + dkj,
·создаем матрицу Sk путем замены в матрице Sk-1 элемента sij на k. Полагаем k = k + 1 и повторяем шаг k.
Поясним действия, выполняемые на k-м шаге алгоритма, представив матрицу Dk-1 так, как она показана на рисунке 4. 5. На этом рисунке строка k и столбец k являются ведущими. Строка i - любая строка с номером от 1 до k - 1, а строка p - произвольная строка с номером от k + 1 до n. Аналогично столбец j представляет любой столбец с номером от 1 до k - 1, столбец q - произвольный столбец с номером от k + 1 до n. Треугольный оператор выполняется следующим образом. Если сумма элементов ведущих строки и столбца (показанных в квадратах) меньше элементов, находящихся в пересечении столбца и строки (показанных в кружках), соответствующих рассматриваемым ведущим элементам, то расстояние (элемент в кружке) заменяется на сумму расстояний, представленных ведущими элементами:

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 363)
Схема 4.5 Иллюстрация алгоритма Флойда

После реализации n шагов алгоритма определение по матрицам Dn и Sn кратчайшего пути между узлами i и j выполняется по следующим правилам.
Расстояние между узлами i и j равно элементу dij в матрице Dn.
Промежуточные узлы пути от узла i к узлу j определяем по матрице Sn. Пусть sij = k, тогда имеем путь i -> k -> j. Если далее sik = k и skj = j, тогда считаем, что весь путь определен, так как найдены все промежуточные узлы. В противном случае повторяем описанную процедуру для путей от узла i к узлу k и от узла k к узлу j (рис. 4.6).

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 364)
Рис 4.6 Треугольный оператор

4.5 Расчет математической модели

Составим для поставленной задачи изображенной на рисунке 4.4. матрицу смежности, получим матрицу D0 (рис. 4.7.)

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 365)
Рис 4.7 Первоначальная матрица

Применим к ней алгоритм Флойда, получим следующую матрицу кратчайших путей и матрицу маршрутов (рис 4.8.) :

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 366)
Рис. 4.8 Результат работы алгоритма

Таким образом, например, кратчайшее расстояние из первой вершины во вторую равно 4. Из шестой в седьмую равно 9, причем проходим через 5-ю вершину, из пятой в первую расстояние равно 10, и проходим через 7-ю вершину (рис. 4.9.)

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 367)
Рис. 4.9 Результат работы алгоритма показан на графе

Путь из 6 в 9 равен 2+7=9.Путь из 1 в 2 равен 4
Перенумеруем узлы по другому (рис.4.10)
Алгоритмы на графах. Нахождение кратчайшего пути (рис. 368)
Рис.4.10. Вторая задача

Составим для поставленной задачи изображенной на рисунке 4.4. матрицу смежности, получим матрицу D0 рис.4.11.

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 369)
Рис.4.11 Первоначальная матрица к второй задаче

Применим к ней алгоритм Флойда, получим следующую матрицу кратчайших путей и матрицу маршрутов (рис.4.12.):

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 370)
Рис 4.12 Результат работы алгоритма

Таким образом, например, кратчайшее расстояние из первой вершины в третью равно 7, путь проходит через 2-ю вершину. Из шестой в четвертую равно 7, причем проходим через 7-ю вершину (рис.4.13.).

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 371)
Рис.4.13. Результат работы алгоритма показан на графе

Перенумеруем узлы по другому (рис.4.14.).

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 372)
Рис.4.14 Третья задача

Составим для поставленной задачи изображенной на рисунке 13 матрицу смежности, получим матрицу D0 (рис.4.15.).

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 373)
Рис.4.15 Первоначальная матрица к третьей задаче
Применим к ней алгоритм Флойда, получим следующую матрицу кратчайших путей и матрицу маршрутов (рис.4.16.):

Алгоритмы на графах. Нахождение кратчайшего пути (рис. 374)
Рис.4.16 Результат работы алгоритма

Таким образом, например, кратчайшее расстояние из третьей вершины в шестую равно 10, путь проходит через 5-ю вершину. Из седьмой во вторую равно 7, причем проходим через 1-ю вершину.

ВЫВОДЫ

С развитием компьютерной техники и компьютеризацией производства и других отраслей человеческой деятельности, непрерывно растет роль дискретной математики как теоретической основы для построения алгоритмов и написания компьютерных программ.
Теория графов - очень важен раздел дискретной математики, особенностью которого является геометрический подход к изучению объектов. Диаграммы графа подобно геометрическим рисунків позволяют получить наглядное представление к разному роду задач.
На сегодняшнее время графы очень удобно использовать для решения задач разных видов. Теория графов является очень актуальной, ее широко применяют не только в самой математике, но и в других естественных науках, в частности, в физике, химии, географии, биологии, картографии, и во многих других науках. Да, например, для построения структурных формул химических элементов, для составления наиболее выгодных транспортных маршрутов, при моделировании сложных технологических процессов, в программировании, в электротехнике - для конструирования печатных схем, а также при изученные последовательного и параллельного соединения проводников.
Граф является математической моделью самых разнообразных объектов, явлений и процессов, которые исследуются и используются в науке, технике и на практике. Графы позволяют строить математическую модель связей между заданными элементами.
Например, в виде графа могут быть изображены электрические, транспортные, информационные и компьютерные и другие сети, карты автомобильных, железнодорожных, воздушных путей, лабиринты, модели кристаллов, структуры молекул химических веществ, и так далее
Примерами применения теории графов является поиск связных компонентов и поиск кратчайших, самых „дешевых” и самых „дорогих” путей в коммуникационных сетях. Для построения таких путей используются разнообразные алгоритмы на графах. В работе рассмотрены наиболее употребимые алгоритмы - алгоритмы Дейкстры и Флойда.
Следовательно, практическая ценность теории графов бесспорна.

СПИСОК ЛИТЕРАТУРЫ

1.Альфред В. Ахо, Джон Э. Хопкрофт, Структуры данных и алгоритмы. изд. дом «Вильямс», Москва, 2000. 118с.
2.Ананий В. Левитин Глава 9. Жадные методы: Алгоритм Дейкстры // Алгоритмы: введение в разработку. М.: «Вильямс» , 2006. 189-195 с.
.Голицына О. Л., Попов И. И. Основы алгоритмизации и программирования: Учебное пособие/ 2-е издание., М.: ФОРУМ. 2006.432 с. (Профессиональное образование).
.Кузнецов Ю. Н., Кузубов В. И., Математическое программирование: учебное пособие. 2-е изд. перераб. и доп. М.; 1980, 300 с. (Высшая школа)
.Лавров С.С. Программирование. Математические основы, средства, теория. СПб.: БХВ, Петербург, 2001. 319 с.
.Мелихов А.Н. применение графов для проектирования дискретных устройств. / А.Н. Мелихов, Л.С. Бернштейн, В.М. Курейчик - М.: Наука, 1974. 304 с.: ил.
.Павленкова Е.В., Чекмарев Д.Т. СБОРНИК ЗАДАНИЙ ПО ДИСКРЕТНОЙ МАТЕМАТИКЕ. Учебно-методическое пособие. Нижний Новгород: Нижегородский госуниверситет, 2012. 68 с.
8.Хаггарти Р Дискретная математика для программистов. - М.: «Техносфера», 2003. - 320 с.
9.Шпак Ю. А. Delphi 7 на примерах/Под ред. Ю. С. Ковтанюка К.: Издательство Юниор, 2003. 384 с.

Комментарии:

Вы не можете оставлять комментарии. Пожалуйста, зарегистрируйтесь.