Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЭММ_Часть2_печать.doc
Скачиваний:
59
Добавлен:
03.09.2019
Размер:
5.35 Mб
Скачать

6.2.3.Алгоритм Флойда

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

Покажем сначала основную идею метода Флойда. Пусть есть три узла и и заданы расстояния между ними (рис. 6.5). Если выполняется неравенство , то целесообразно заменить путь путем . Такая замена (далее ее будем условно называть треугольным оператором) выполняется систематически в процессе выполнения алгоритма Флойда.

Рис. 6.13. Определение треугольного оператора

Алгоритм метода:

  1. Определяем начальную матрицу расстояний и матрицу последовательности узлов . Диагональные элементы обеих матриц (см. табл. 83 и 84) помечаются знаком «», показывающим, что эти элементы в вычислениях не участвуют. Полагаем .

  2. Основной шаг . Задаем строку и столбец как ведущую строку и ведущий столбец. Рассматриваем возможность применения треугольного оператора ко всем элементам матрицы . Если выполняется неравенство ( ), тогда выполняем следующие действия:

    1. создаем матрицу путем замены в матрице элемента на сумму ;

    2. создаем матрицу путем замены в матрице элемента на .

Полагаем и повторяем шаг .

Таблица 83

Начальная матрица расстояний

=

1

2

1

2

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

..

.

.

.

.

.

.

.

.

.

.

Поясним действия, выполняемые на -м шаге алгоритма, представив матрицу так, как она показана на рис. 6.6. На этом рисунке строка и столбец являются ведущими. Строка –любая строка с номером от 1 до , а строка - произвольная строка с номером от до . Аналогично столбец представляет любой столбец с номером 1 от до , а столбец – произвольный столбец с номером от до . Треугольный оператор выполняется следующим образом. Если сумма элементов ведущих строки и столбца (показанных в квадратиках) меньше элементов, находящихся на пересечении столбца и строки (показаны в кружках), соответствующих рассматриваемым ведущим элементам, то расстояние (элемент в кружке) заменяется на сумму расстояний, представленных ведущими элементами.

Таблица 84

Матрица последовательности узлов

=

1

2

1

2

2

1

.

.

.

.

.

.

.

.

.

.

.

.

.

.

1

2

.

.

.

.

.

.

.

.

.

.

.

.

.

.

1

2

Рис. 6.14. Фрагмент матрицы

После реализации шагов алгоритма определение по матрицам и кратчайшего пути между узлами и выполняется по следующим правилам: 1. Расстояние между узлами и равно элементу в матрице .

  1. Промежуточные узлы пути от узла к узлу определяем по матрице . Пусть = , тогда имеем путь . Если далее = и = , тогда считаем, что весь путь определен, так как найдены все промежуточные узлы. В противном случае повторяем описанную процедуру для путей от узла к узлу и от узла к узлу .

Пример 6.0:

Н айдем для сети, показанной на рис. 6.7, кратчайшие пути между любыми двумя узлами. Расстояния между узлами этой сети проставлены на рисунке возле соответствующих ребер. Ребро (3,5) ориентированно, поэтому не допускается движение от узла 5 к узлу 3. Все остальные ребра допускают движение в обе стороны.

Шаг 0. Начальные матрицы и строятся непосредственно по заданной схеме сети (см. табл 83 и 84). Матрица симметрична, за исключением пары элементов и , где (поскольку переход от узла 5 к узлу 3 невозможен).

Таблица 85

Начальная матрица сети

1

2

3

4

5

1

3

10

2

3

5

3

10

6

15

4

5

6

4

5

4

Таблица 86

Начальная матрица

1

2

3

4

5

1

2

3

4

5

2

1

3

4

5

3

1

2

4

5

4

1

2

3

5

5

1

2

3

4

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

1. Заменяем на и устанавливаем .

2. Заменяем на и устанавливаем .

Матрицы и , имеют вид, приведенный в табл. 87 и 88.

Таблица 87

Матрица

1

2

3

4

5

1

3

10

2

3

13

5

3

10

13

6

15

4

5

6

4

5

4

Таблица 88

Матрица

1

2

3

4

5

1

2

3

4

5

2

1

1

4

5

3

1

1

4

5

4

1

2

3

5

5

1

2

3

4

Шаг 2. Полагаем , в матрице выделены ведущие строка и столбец. Треугольный оператор применяется к элементам матриц и , выделенным двойной рамкой. В результате получены матрицы и (см. табл. 89 и 90).

Таблица 89

Матрица

1

2

3

4

5

1

3

10

8

2

3

13

5

3

10

13

6

15

4

8

5

6

4

5

4

Таблица 90

Матрица

1

2

3

4

5

1

2

3

2

5

2

1

1

4

5

3

1

1

4

5

4

2

2

3

5

5

1

2

3

4

Шаг 3. Полагаем , в матрице выделены ведущие строка и столбец. Треугольный оператор применяется к элементам матриц и , выделенным двойной рамкой. В результате получены матрицы и (см. табл. 91 и 92).

Таблица 91

Матрица

1

2

3

4

5

1

3

10

8

25

2

3

13

5

28

3

10

13

6

15

4

8

5

6

4

5

4

Таблица 92

Матрица

1

2

3

4

5

1

2

3

2

3

2

1

1

4

3

3

1

1

4

5

4

2

2

3

5

5

1

2

3

4

Шаг 4. Полагаем , ведущие строка и столбец в матрице выделены. Получаем новые матрицы и (см. табл. 93 и 94).

Таблица 93

Матрица

1

2

3

4

5

1

3

10

8

12

2

3

11

5

9

3

10

11

6

10

4

8

5

6

4

5

12

9

10

4

Таблица 94

Матрица

1

2

3

4

5

1

2

3

2

4

2

1

4

4

4

3

1

4

4

4

4

2

2

3

5

5

4

4

4

4

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

Конечные матрицы и (см. табл. 93 и 94) содержат всю информацию, необходимую для определения кратчайших путей между любыми двумя узлами сети. Например, кратчайшее расстояние между узлами 1 и 5 равно .

Для нахождения соответствующих маршрутов напомним, что сегмент маршрута состоит из ребра только в том случае, когда = . В противном случае узлы и связаны, по крайней мере, через один промежуточный узел. Например, поскольку и , сначала кратчайший маршрут между узлами 1 и 5 будет иметь вид 1→ 4→5, но так как , узлы 1 и 4 в определяемом пути не связаны одним ребром (но в исходной сети они могут быть связаны непосредственно). Далее следует определить промежуточный узел (узлы) между первым и четвертым узлами. Имеем и , поэтому маршрут 1→4 заменяем 1→2→4. Поскольку и , других промежуточных узлов нет. Комбинируя определенные сегменты маршрута, окончательно получаем следующий кратчайший путь от узла 1 до узла 5: 1→2→4→5. Длина этого пути равна 12 милям.