Задача о кратчайшем пути

Пусть известен сетевой график (см. рисунок 1) всевозможных маршрутов из пункта 0 в n. Заданы неотрицательные числа lij – длина пути из ni в nj. Считается, что сеть сильно связана, т.е. существует путь между любыми двумя ее вершинами. Требуется определить кратчайший путь из пункта 0 в пункт n (в данном примере n=7).

 

 
 

 


Рис. 1

 

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

10. Помечаем вершину 0 индексом a0.

20. Помечаем в порядке нумерации все вершины сетевого графика следующим образом: aj = mini,j [ai+lij], где i,j – номера вершин.

30. Находим значение an – длину кратчайшего пути.

40. Двигаясь от конца сетевого графика к началу, определяем дуги, входящие в кратчайший путь, как дуги, для которых min [aj-ai] = lij.

Решение:

1. a0=0

2. a1=l01=1

a2=min[0+4;1+2]=3

a3=min[0+6;3+1]=4

a4=min[3+5;4+2]=6

a5=min[4+2;6+3]=6

a6=min[6+1;1+7]=7

a7=min[7+2;6+5;6+4]=9

3. Итак, an=a7=9

4. Двигаясь от конца к началу, определяем дуги, входящие в кратчайший путь из условия min [aj-ai] = lij.

из 7: min[a7-a6; a7-a4; a7-a5]=min[9-7;9-6;9-6]=2, 76

из 6: min[a6-a4; a6-a1]=min[7-6;7-1]=1, 764

из 4: min[a4-a2; a4-a3]=min[6-3;6-4]=2, 7643

из 3: min[a3-a2; a3-a0]=min[4-1;4-0]=3, 76432

из 2: min[a2-a1; a2-a0]=min[3-1;3-0]=2, 764321

из 1: [a1-a0]=1, 7643210

Значит, кратчайший путь 0®1®2®3®4®6®7.

Длина пути an=9.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: