Вы находитесь на странице: 1из 9

Ministerul Educaţiei, Culturii și Cercetării al Republicii Moldova

Universitatea Tehnică a Moldovei

Facultatea Calculatoare Informatică şi Microelectronică


Departamentul Ingineria Software și Automatică

RAPORT
Lucrarea de laborator Nr. 3
la Matematica specială

Tema: Algoritmii de determinare a drumului minim

A efectuat:
st. gr. TI-210 Kizitki Maxim

A verificat:
asist univ. FCIM Cernei Irina

Chișinău, 2021
Цель работы

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


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

Основные задачи

 Разработать процедуру введения взвешенного графа;


 Разработать процедуры определения минимального пути;
 Выполнить программу со следующими функциями:
o введение взвешенного графа с возможностями синтаксического и
семантического анализа и коррекции информации;
o определение минимального пути;
o вывод информации в терминал (минимальное значение пути и
последовательность вершин, которые образуют этот путь).

Краткие сведения об алгоритмах поиска минимального пути

Пусть G  - связанный ориентированный  граф, в котором  каждому  ориентированному   ребру 


сопоставлено   положительное  вещественное  число,  называемое длиной  ребра. Такой  граф
называется  взвешенным,  т.к.  каждое ребро  как бы  имеет свой  вес или  длину. Длина ребра, 
например, из вершины i в вершину j обозначается w(i,j). Если в графе  отсутствует ребро, 
например из вершины i  в вершину j, то  w(i,j) =  MAX. Длина ориентированного  пути в графе
G -  это сумма длин ребер,  составляющих путь.
        Ориентированный  s  -  t  -  путь,  имеющий  минимальную длину,  называется  
кратчайшим  путем   из   s   в  t.   Длина  кратчайшего  ориентированного  s -t  - пути 
называется расстоянием  из s  в t  и  обозначается через d(s,t). Ясно, что d(i,i) = 0 для любого i.

Алгоритм  Форда позволяет  от какой-либо  исходной вершины  xi   определить минимальный


путь до произвольной вершины xj  графа G.        Алгоритм Форда состоит из следующих шагов:
        1)  Исходной вершине xi  графа ставится в соответствие 0;
1) Всем остальным вершинам графа  G   ставятся  в  соответствие             максимально
возможные для данной задачи числа Hi;
        2)  На втором  шаге вычисляются  разности Hj - Hi  для каждой   вершины  xi , где  Hj -  вес
вершины,  в которую ведет дуга  (xi,xj). Здесь возможны три случая : Hj - Hi < Lij,
                                        Hj - Hi = Lij,
                                        Hj - Hi > Lij,
            где Lij  - вес дуги, ведущей  из вершины xi  в  вершину xj .    Случай,  когда  Hj  -  Hi  > 
Lij  позволяет нам уменьшить   расстояние  между вершинами  xi  и  xj  благодаря  следующим
преобразованиям: 
Hj  -  Hi  >  Lij
Hj >  Lij + Hi,
            отсюда принимаем: Hj = Hi + Lij.
            Второй  шаг выполняется  до тех  пор, пока  еще существуют   пары (i,j), для которых
выполняется  неравенство Hj - Hi > Lij.
            По  окончанию  второго  этапа  метки  вершин позволяют нам            определить 
значение  минимального   пути  из  исходной  в   конечную вершину;
        3) На  третьем этапе происходит  определение минимального пути           при помощи
обратного хода от конечной вершины к начальной,    причем  для вершины  xj
предшествующей  будет вершина  xi ,  если  для  этой  пары  выполняется  Hj  -  Hi  = Lij. Если 
существует  несколько таких  пар, то  выбирается любая  из  них.

Использование  алгоритма   Белмана  -  Калаба   позволяет  нам  ускорить поиск  минимального


пути между  произвольной заданной парой  вершин.
        На  первом  этапе  заданному  графу  ставится  в  соответствие  взвешенная  матрица
смежности  M. Матрица  формируется по  следующим  правилам:
        1) M(i,j) = Lij, если существует дуга, ведущая из xi в xj, где    Lij - вес этой дуги;
        2) M(i,j) =  max, где  max -  максимально возможное число для   данной задачи, если не
существует дуги, ведущей из вершины   xi  в xj;
        3) M(i,j) = 0, если i = j.
           На втором  этапе строится вектор   по следующим правилам:
        1) = Lin, если существует  дуга, ведущая из вершины xi  в    вершину xn, где xn -
конечная заданная вершина, для которой  ищется минимальный путь, Lin - вес этой дуги;
        2) =  max,  где  max -  максимально возможное  число для  данной задачи, если не 
существует дуги, ведущей из вершины   xi  в xn;
        3) = 0, если i = j.

           На k-той итерации строится вектор по следующим правилам:


        1) = min{ }, где i = 1..(n - 1), j =1..n;
                   i<>j
        2)
            Итерации  прекращаются, когда  мы получаем  вектор, равный  предыдущему, т.е.
.
        После  прекращения   процесса  элемент  вектора   дает нам  длину минимального 
пути  из вершины  xi  в    вершину xn, где xn - конечная заданная вершина, для которой  ищется
минимальный путь.

Полный проект доступен по следующей ссылкe:


https://replit.com/@EverSoAnxi0us/Minimal#main.c
Ход работы:

Листинг 1 – вывод меню в терминал

Нажимаем 11

Листинг 2 – тест графа

Мы проверяем, был ли он введен:


Листинг 3 – проверка

Все сводится к тому, что мы строим таблицу по Форду для минимального пути

Листинг 4 – таблица по Форду

Выводится минимальный путь

Листинг 5 – путь

Выводится максимальный путь


Листинг 6 – путь

Проверка в тетради:

Фотография 1 – проверка верности алгоритма

Для теста мы рассчитываем минимальный путь и для второго графа:

Листинг 7 – меню
Дуги:

Листинг 8 – дуги

Таблица

Листинг 9 – Результат работы программы


Минимальный путь

Листинг 10 – минимальный путь

Максимальный путь

Листинг 11 – максимальный путь


Проверка в тетради

Вывод

Во-первых, я изучил алгоритмы определения минимального пути в графике и научился


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

Вам также может понравиться