Определения и понятие теории графов. Алгоритм нахождения кратчайшего расстояния от одной из вершин графа до всех остальных, работающий только для графов без ребер отрицательного веса. Реализация алгоритма Дейкстры на языке программирования Delphi.
Аннотация к работе
Простым графом G называется пара (V, E), где V - непустое конечное множество, элементы которого называются вершинами графа, а E - конечное множество неупорядоченных пар различных элементов из V, элементы множества E называются ребрами. Если (u,v) - некоторое ребро графа G, то вершины u и v называются смежными, а вершины u и ребро (u,v), также как вершина v и ребро (u,v), называютсяинцидентными друг другу. Степенью вершины v в графе G называется число ребер графа G, инцидентных вершине v. v3 v4 v1 v5 v2 v6 Маршрутом в графе G, соединяющим вершины u и v, называется конечная чередующаяся последовательность вершин и ребер вида v1, e1, v2, e2,...,ek-1, vk, где v1,...,vk из V, а e1,...,ek-1 из E. Транспортной сетью называется конечный Связный орграф G(V, E) без петель, каждой дуге которого поставлено в соответствие некоторое неотрицательное число c( ), называемое пропускной способностью дуги, и существует: 1) ровно одна вершина , в которую не заходит ни одна дуга, называемая источником или началом сети;Основной задачей моей курсовой является запрограммировать алгоритм, Дейкстры, по решению задачи о нахождение кратчайшего пути в сети.for I:=0 to High(Arr) do if Arr[I]._vertex = Num then begin // ищем ребро с минимальным весом в оба направления for I:=0 to High(Massiv) do if (Massiv[I]._weight <Min) and not (Massiv[I]._checked) then begin if INARR(VERTARR, Massiv[I]._start) and (Vertex[Massiv[I]._end - 1]._vertex =-1) then begin end else if INARR(VERTARR, Massiv[I]._end) and (Vertex[Massiv[I]._start - 1]._vertex =-1) then begin end else begin // вычитаем из стоимости всех проверенных ребер стоимость наименьшего for I:=0 to High(Massiv) do if (not Massiv[I]._checked) and (INARR(VERTARR, Massiv[I]._start) or INARR(VERTARR, Massiv[I]._end)) then beginРазмещено на .
План
Содержание
1. Введение
2. Теория. Основные понятия
3. Постановка задачи
4. Реализация
5. Тестовый пример
Введение
Бурное развитие дискретной математики обусловлено прогрессом компьютерной техники, необходимостью создания средств обработки и передачи информации, а также представления различных моделей на компьютерах, являющихся по своей природе конечными структурами.
Нахождение кратчайшего пути на сегодняшний день является жизненно необходимой задачей и используется практически везде, начиная от нахождения оптимального маршрута между двумя объектами на местности (например, кратчайший путь от дома до университета), в системах автопилота, для нахождения оптимального маршрута при перевозках, коммутации информационного пакета в сетях и т.п.
Кратчайший путь рассматривается при помощи некоторого математического объекта, называемого графом. Поиск кратчайшего пути ведется между двумя заданными вершинами в графе. Результатом является путь, то есть последовательность вершин и ребер ,инцидентных двум соседним вершинам, и его длина.
Теория и основные понятия
Первая работа по теории графов принадлежит Леонарду Эйлеру (1736 год) , хотя термин «граф» впервые ввел в 1936 году венгерский математик Денеш Кениг . Графами были названы схемы, состоящие из точек и соединяющих эти точки отрезков прямых или кривых.
С помощью графов часто упрощалось решение задач, сформулированных в различных областях знаний: в автоматике, электронике, физике, химии и др. С помощью графов изображаются схемы дорог, газопроводов, тепло- и электросети. Помогают графы в решении математических и экономических задач.
Определения теории графов
Простым графом G называется пара (V, E), где V - непустое конечное множество, элементы которого называются вершинами графа, а E - конечное множество неупорядоченных пар различных элементов из V, элементы множества E называются ребрами.
В дальнейшем будем рассматривать только простые графы, опуская при этом слово простые.
Если (u,v) - некоторое ребро графа G, то вершины u и v называются смежными, а вершины u и ребро (u,v), также как вершина v и ребро (u,v), называютсяинцидентными друг другу. Степенью вершины v в графе G называется число ребер графа G, инцидентных вершине v. v3 v4 v1 v5 v2 v6
Пример графа
В данном примере
V = {v1, v2, v3, v4, v5, v6}, E = {(v1, v2), (v2, v3), (v1, v3), (v3, v4), (v4, v5), (v4, v6), (v5, v6)} теория граф алгоритм программирование
Пусть G = (V, E) - некоторый граф, u и v - его вершины. Маршрутом в графе G, соединяющим вершины u и v, называется конечная чередующаяся последовательность вершин и ребер вида v1, e1, v2, e2,...,ek-1, vk, где v1,...,vk из V, а e1,...,ek-1 из E. Маршрут называют цепью, если все его ребра различны. Цепь называют путем (или простой цепью), если все ее вершины кроме, быть может, концевых различны. Если начальная и конечная вершина пути совпадают, то его называют замкнутым путем или циклом.
Граф называется связным графом, если для любых двух его вершин существует соединяющий их маршрут.
Теперь мы можем определить особый класс графов - деревья. Деревом называется связный граф без циклов.
Ориентированным графом D называется пара (V, A), где V - непустое конечное множество, элементы которого называются вершинами графа, а A - конечное множество упорядоченных пар различных элементов из V, элементы множества A называются дугами.
Подобно графам для ориентированных графов вводятся понятие смежности вершин, понятие инцидентности и так далее.
Основанием ориентированного графа D = (V, A), называется граф G = (V, E), где E = A, то есть упорядоченные пары вершин заменяются на неупорядоченнные.
Транспортной сетью называется конечный Связный орграф G(V, E) без петель, каждой дуге которого поставлено в соответствие некоторое неотрицательное число c( ), называемое пропускной способностью дуги, и существует: 1) ровно одна вершина , в которую не заходит ни одна дуга, называемая источником или началом сети;
2) ровно одна вершина , из которой не выходит ни одной дуги; эта вершина называется стоком или концом сети.
Потоком сети называется неотрицательная функция f(1) такая, что f(e) меньше или равно c(e). (Поток не может превышать пропускную способность дуги.)
Дуга называется насыщенной потоком f, если (Поток называется полным, если содержит насыщенную дугу f(e)=c(e).)
Разрезом L сети G(V,E) называется множество насыщенных дуг, отделяющих источник s от стока t.
Алгоритм Дейкстры
Данный алгоритм является алгоритмом на графах, который изобретен нидерландским ученым Э. Дейкстрой в 1959 году. Алгоритм находит кратчайшее расстояние от одной из вершин графа до всех остальных и работает только для графов без ребер отрицательного веса.
Каждой вершине приписывается вес - это вес пути от начальной вершины до данной. Также каждая вершина может быть выделена. Если вершина выделена, то путь от нее до начальной вершины кратчайший, если нет - то временный. Обходя граф, алгоритм считает для каждой вершины маршрут, и, если он оказывается кратчайшим, выделяет вершину. Весом данной вершины становитсявес пути. Для всех соседей данной вершины алгоритм также рассчитывает вес, при этом ни при каких условиях не выделяя их.Алгоритм заканчивает свою работу, дойдя до конечной вершины, и весом кратчайшего пути становится вес конечной вершины.
Алгоритм Дейкстры
Шаг 1. Всем вершинам, за исключением первой, присваивается вес равный бесконечности, а первой вершине - 0.
Шаг 2. Все вершины не выделены.
Шаг 3. Первая вершина объявляется текущей.
Шаг 4. Вес всех невыделенных вершин пересчитывается по формуле: вес невыделенной вершины есть минимальное число из старого веса данной вершины, суммы веса текущей вершины и веса ребра, соединяющего текущую вершину с невыделенной.
Шаг 5. Среди невыделенных вершин ищется вершина с минимальным весом. Если таковая не найдена, то есть вес всех вершин равен бесконечности, то маршрут не существует. Следовательно, выход. Иначе, текущей становится найденная вершина. Она же выделяется.
Шаг 6. Если текущей вершиной оказывается конечная, то путь найден, и его вес есть вес конечной вершины.
Шаг 7. Переход на шаг 4.
В программной реализации алгоритма Дейкстры построим множество S вершин, для которых кратчайшие пути от начальной вершины уже известны. На каждом шаге к множеству S добавляется та из оставшихся вершин, расстояние до которой от начальной вершины меньше, чем для других оставшихся вершин. При этом будем использовать массив D, в который записываются длины кратчайших путей для каждой вершины. Когда множество S будет содержать все вершины графа, тогда массив D будет содержать длины кратчайших путей от начальной вершины к каждой вершине.
Помимо указанных массивов будем использовать матрицу длин C, где элемент C[i,j] -длина ребра (i,j), если ребра нет, то ее длина полагается равной бесконечности, то есть больше любой фактической длины ребер. Фактически матрица C представляет собой матрицу смежности, в которой все нулевые элементы заменены на бесконечность.
Для определения самого кратчайшего пути введем массив P вершин, где P[v] будет содержать вершину, непосредственно предшествующую вершине v в кратчайшем пути .