Словестный алгоритм действий.

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

«ЮЖНЫЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ»

ТЕХНОЛОГИЧЕСКИЙ ИНСТИТУТ В Г. ТАГАНРОГЕ

(ТТИ Южного федерального университета)

Факультет автоматики и вычислительной техники

Кафедра систем автоматизированного проектирования

ОТЧЕТ

по лабораторной работе №2

Дисциплина: Теория графов и гиперграфов

Тема: «Алгоритм Форда и Дейкстра»

Выполнил:

Ст-т. группы А-71

Субоч В.С

Преподаватель:

Щеглов С.Н.

Таганрог 2012

Маршруты, цепи, циклы. Определения и примеры.

Маршрутом в графе G = (X, U) называется некоторая конечная последовательность ребер вида S = (х0, х1), (x1, х2), ..., (х(l-I) , x(l)), где х(о), х(l) - соответственно его начальная и конечная вершины. Очевидно, что в конечном графе G можно выделить только конечное число маршрутов. Число ребер в маршруте S называется его длиной. Существует простой способ определения маршрутов длиной q по матрице R графа G путем возведения ее в q-ю степень.

Например, пусть задана матрица R графа G

 

Построим граф

 
  Словестный алгоритм действий. - student2.ru

Рисунок 1 – пример графа

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

Получим:

 

Замкнутая цепь, в которой х0 = х1, называется циклом.

Соответственно цепи и циклы называются простыми, если они не содержат повторяющихся вершин, кроме, разумеется, первой и последней в случае цикла. В графе G

S1 = (x1, х2), (х2, х3), (х3, х4),(х4,х1),(х1,х2) - маршрут

S2 = (х1, х2), (х2, х3), (х3, х4), (х4, х1) – цикл

 
  Словестный алгоритм действий. - student2.ru

Рисунок 2 – граф

S3= (х1,х2)(х2,х3)(х3,х4) – простой цикл

S4= (х1,х2)(х2,х4)(х4,х5)(х5,х3)(х3,х2)(х2,х4) – цепь.

Цикл длиной 3 называется треугольником.

Произвольный граф. Найти кратчайшие по стоимости пути между всеми вершинами графа. Метод Форда

Словестный алгоритм действий. - student2.ru

 

Словестный алгоритм действий. - student2.ru

Словестный алгоритм действий.

1) Строим матрицу R взвешенного графа G

Фиксируем одну вершину xk и приписываем V(k) = 0, а все м остальным V(n) = M.

2) За начало принимаем 1 вершину xi. Делаем проверку

V(j) > V(i) + rij. Если выполняется то заменяем V(j) на сумму V(i) + rij.

3) Выполняем пункты 1,2 пока все вершины не будут рассмотренны.

4) Конец алгоритма.

Построить структурную схему алгоритма Форда.

#include <iostream>

using namespace std;

int main()

{

const int n = 9;

int m[n][n] = { {0,3,0,6,0,0,0,7,3},

{3,0,5,0,0,0,0,9,11},

{0,5,0,8,6,0,0,0,12},

{6,0,8,0,3,0,14,10,5},

{0,0,6,3,0,2,4,6,0},

{0,0,0,0,2,0,15,13,0},

{0,0,0,14,4,15,0,1,0},

{7,9,0,10,6,13,1,0,3},

{3,11,12,5,0,0,0,3,0}};

int V[n],xk,cache;

xk = m[0][0];

for(int j = 0; j < n; j++)

{

if(j == 0)

V[j] = xk;

else

V[j] = -1;

}

for(int i = 0; i < n; i++)

{

for(int j =i; j < n; j++)

{

if(m[i][j] != 0)

{

if(V[j] == -1)

{

V[j] = V[i] + m[i][j];

}

else

if( V[j] < V[i] + m[i][j])

break;

else

V[j] = V[i] + m[i][j];

/*else

if(cache < V[j])

V[j] = V[i] + m[i][j];

else

V[j] = m[i][j];*/

}

}

}

for(int i =0; i < n; i++)

cout << V[i] << " ";

return 0;

}

Произвольный граф. Найти кратчайшие по стоимости пути между всеми вершинами графа. Метод Дейкстры.

 

Словестный алгоритм действий. - student2.ru

Словестный алгоритм действий.

1. l(s) = 0, а осталные l(xi) = -1 для всех xi != s и считаем их пометки временные.

2. l(xi) <- min[l(xi); l(p) + r(p,xi)] – блок превращения прметки в постоянную.

3. Среди всех вершин найти такую, что l(xi) = min[l(xi)]/

4. xi считать постоянной и положить p = xi.

Наши рекомендации